乐趣区

关于javascript:油猴跨域数据传输脚本

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

// ==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...
})();
退出移动版