Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与Greasemonkey&;子窗口_Javascript_Cross Browser_Xss_Greasemonkey_Tampermonkey - Fatal编程技术网

Javascript 与Greasemonkey&;子窗口

Javascript 与Greasemonkey&;子窗口,javascript,cross-browser,xss,greasemonkey,tampermonkey,Javascript,Cross Browser,Xss,Greasemonkey,Tampermonkey,我有一个100%的客户端解决方案。我请求一个网页。将Greasemonkey(GM)脚本插入页面并重新组织页面(其中包含一个表)。该表现在具有javascript按钮,用于启动与每行相关的窗口,如下所示: //在父页面中: var companyTable = data; // a table acquired with XMLHTTPRequest var chartCode = chartGenFunct.toString(); // funct to gen a chart inserte

我有一个100%的客户端解决方案。我请求一个网页。将Greasemonkey(GM)脚本插入页面并重新组织页面(其中包含一个表)。该表现在具有javascript按钮,用于启动与每行相关的窗口,如下所示:

//在父页面中:

var companyTable = data; // a table acquired with XMLHTTPRequest
var chartCode = chartGenFunct.toString(); // funct to gen a chart inserted by GM
var win = window.open('data:text/html;base64,'+ window.btoa(childWindow), '_blank');
其中,childWindow字符串包含:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>GM Script Info</title>
        <style type="text/css"></style>
</head>
<body bgcolor="#FFFFFF">


<div id="companyTableDiv"></div>
<div id="companyChartDiv"></div>

<script type="text/javascript" src="http://www.google.com/jsapi"></script>

<script id="XXswScriptInitXX" type="application/javascript">
document.getElementById("companyTableDiv").innerHTML = window.opener.companyTable;
eval(window.opener.chartCode +"showTimeLine()"); // fills CompanyChartDiv

</script>
</body>
</html>
父窗口的omnibox所在位置:

http://somewebsite.com/table
这就是我所说的“Firefox中的一切都能正常工作”的要点。这不适用于带有Tampermonkey(TM)的Chrome。它不起作用的原因是Chrome阻止了它,因为根据错误控制台日志记录,这似乎是一个跨源资源共享问题:

未捕获的安全性错误:已从阻止原点为“null”的帧 访问原点为“”的帧。框架 请求访问的协议是“数据”,即正在访问的帧 有一个“http”协议。协议必须匹配

第行:

document.getElementById("companyTableDiv").innerHTML = window.opener.companyTable;

请记住,这是一个100%的客户端解决方案。我怎样才能骗Chrome让孩子看到开场白(家长)的数据?(我已经尝试插入document.domain=但这不起作用。)

我遇到了同样的问题,但我想我知道一个解决方法,至少对于父窗口中最多5MB的静态数据,您可能希望子窗口访问这些数据。利用“”机制。打开子窗口时,同时将数据转储到本地存储。然后子窗口可以访问那里的数据,而不是试图直接从父窗口获取数据


请注意,如果在第一次“清除”所有内容后,多个网页想要保存某些内容,那么本地存储可能非常短暂!您的子窗口应该尽可能快地抓取整个数据块,然后故意删除它。如果父窗口在后台运行JavaScript,即使子窗口正在执行某些操作,它也可能会注意到删除,并将新的内容放入本地存储中,以便子窗口查找……

我今天也遇到了同样的问题,我的工作解决方案是使用GM值

打开新窗口的方式将触发在其上运行相同的用户脚本。然后,您可以创建两个数据“流”:父数据流和子数据流

例如,这是侦听在父脚本部分中的外观:

var messageFromChild, childStreamControl;
childStreamControl = setInterval(function(){
    messageFromChild = GM_getValue('childStream', 0);
    if(messageFromChild != 0){
        GM_deleteValue('childStream');
        eval(messageFromChild);
    }
}, 50);
广播:

// stream = [preparedMessage1, preparedMessage2...]
var ownStreamControl;
ownStreamControl = setInterval(function(){
    if(GM_getValue('parentStream', 0) != 0 && stream.length > 0){
        GM_setValue('parentStream', stream.unshift());
    }
}, 50);

Thx——很有趣——大约在我意识到并测试这个的同时。我可以将同一页面的链接信息放在:window.open('),“_blank')--然后在子窗口中,由于我使用的是Greasemonkey,我可以覆盖整个页面,并使用通过window.opener.some_变量传递给子窗口的变量。这项技术似乎很有效。我仍然在微调,我认为它现在也应该在Chrome中工作。尽管如此,我最初的问题仍然有待其他人收集信息。不幸的是,我希望我的子页面不仅仅是访问父页面数据;我还想访问父页面上的函数和对象。这些东西不能通过本地存储传递。但是,我想尝试一个实验,如果它有效,我将发布它作为另一个答案。如果我检查DOM,我可以从opener窗口看到我的全局变量和代码。例如,函数main是window.opener.maincode。如果只使用select函数,您可以设置全局变量,如“var funkshun=mainPageFunction.toString()”,并且您的子页面可以通过window.opener.funkshun访问此主页代码。很抱歉,我不理解您最初的解释。“同一页面的链接信息”与原始父项和子项的关系如何?也就是说,在我看来你在谈论打开第三个窗口,那么前两个窗口中的哪一个正在打开,前两个窗口中的哪一个正在重新打开?在我的例子中,初始页面需要做一些安全的事情,但完成后,它就不需要再安全了(我希望有办法关闭它!)。初始页面生成的子页面都不需要安全性,但它们确实需要访问初始/父页面上的内容。啊-我的情况。。。页面somesite.com/example.pl显示了一个页面,该页面被发布回自身,并绘制了一个具有相同URL的不同页面。在与您讨论时,我使用了“同一页”。相反,考虑“同一页”是指同一站点/域上的任何页面(SoMeSIT.com)。为了避免CORS限制,当从该站点返回任何页面时,只需通过查找window.opener父全局变量(如chldWin if(window.opener){if(window.opener.chldWin){//my-global-parent-document.body.innerHTML=window.opener.chldWin);
// stream = [preparedMessage1, preparedMessage2...]
var ownStreamControl;
ownStreamControl = setInterval(function(){
    if(GM_getValue('parentStream', 0) != 0 && stream.length > 0){
        GM_setValue('parentStream', stream.unshift());
    }
}, 50);