Allow the userscript on both urls and use GM_setValue/GM_getValue to organize the communication.
//@match http://example1.com //@match http://example2.com //@require@grant GM_getValue //@require@grant GM_setValue if (location.href.indexOf('http://example1.com') == 0) { GM_setValue('id', Date.now() + '\n' + document.getElementById("myId").textContent); window.open("http://example2.com","_self"); } else if (location.href.indexOf('http://example2.com') == 0) { var ID = GM_getValue('id', ''); if (ID && Date.now() - ID.split('\n')[0] < 10*1000) { ID = ID.split('\n')[1]; .............. use the ID } } This is a simplified example. In the real code you may want to use
location.hostorlocation.originor matchlocation.hrefwith regexp depending on what the real urls are.To pass complex objects serialize them:
GM_setValue('test', JSON.stringify({a:1, b:2, c:"test"}));try { var obj = JSON.parse(GM_getValue('test')); } catch(e) { console.error(e) }