油猴跨域数据传输脚本

Posted papermoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了油猴跨域数据传输脚本相关的知识,希望对你有一定的参考价值。

利用多页面共享的脚本,
可以实现利用油猴跨域共享页面数据。

// ==UserScript==
// @name         跨页面数据传输脚本
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  利用共用脚本实现跨域通讯
// @connect      *
// @author       dzt

// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_removeValueChangeListener
// @grant       GM_addValueChangeListener
// @run-at      document-end
// @match       页面A
// @include     页面B
// @include     页面C
// ==/UserScript==
(function() {
    \'use strict\';
    unsafeWindow.__t_sendCrossDomainMessage= function(data){
        let __source = location.href;
         let __domain = document.domain;
        //利用createObjectURL生成不重复的uuid
        const __url = URL.createObjectURL(new Blob());
        const uuid = __url.substring(__url.lastIndexOf(\'/\') + 1);
        console.log(\'生成新的crossDomainMessage-uuid:\',uuid);
        GM_setValue(\'data\',data);
        GM_setValue(\'source\',__source);
        GM_setValue(\'domain\',__domain);
        GM_setValue(\'uuid\',uuid);//触发数据变更
    }
    //ValueChangeListener需要使用值类型的变化来触发,这里使用了uuid字符串触发
    //fn可选加入数据源判断
    unsafeWindow.__t_onReceiveCrossDomainMessage = function(fn){
        GM_removeValueChangeListener(\'uuid\');
        GM_addValueChangeListener(\'uuid\',(name,oldValue,newValue,remote)=>{
            //console.log(name,oldValue,newValue,remote);
            console.log(\'crossDomainMessage-uuid 已改变\',\'crossDomainMessage-uuid is Change!!\');
            let uuid = newValue;
            let data = GM_getValue(\'data\');
            let source = GM_getValue(\'source\');
            let domain = GM_getValue(\'domain\');
            return fn({uuid,data,source,domain,source});
        })
     }
    // Your code here...
})();

以上是关于油猴跨域数据传输脚本的主要内容,如果未能解决你的问题,请参考以下文章

油猴脚本 GreasemonkeyGM_xmlhttpRequest内部实现原理

油猴脚本:百度网盘搜索引擎聚合

有哪些超神的油猴脚本?

油猴脚本编写

油猴脚本-隐藏你的twitter信息

油猴脚本:去除百度首页广告卡片推荐和二维码