Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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 谷歌Chrome用户脚本-与其他窗口一起工作,牵手_Javascript_Iframe_Google Chrome_Userscripts - Fatal编程技术网

Javascript 谷歌Chrome用户脚本-与其他窗口一起工作,牵手

Javascript 谷歌Chrome用户脚本-与其他窗口一起工作,牵手,javascript,iframe,google-chrome,userscripts,Javascript,Iframe,Google Chrome,Userscripts,我在Google Chrome中的用户脚本有一个小问题,准确地说是在访问iframe的对象窗口时。通过谷歌Chrome控制台非常可行,通过用户脚本非常不可能,至少目前看来是这样。老实说,这似乎是故意的,好像有什么原因不允许我访问其他窗口对象 document.body.innerHTML += "<iframe name='iframe'></iframe>"; console.log(top.frames.iframe); console.log(window.fram

我在Google Chrome中的用户脚本有一个小问题,准确地说是在访问iframe的对象窗口时。通过谷歌Chrome控制台非常可行,通过用户脚本非常不可能,至少目前看来是这样。老实说,这似乎是故意的,好像有什么原因不允许我访问其他窗口对象

document.body.innerHTML += "<iframe name='iframe'></iframe>";
console.log(top.frames.iframe);
console.log(window.frames.iframe);
console.log(unsafeWindow.frames.iframe);
console.log(document.getElementsByName('iframe')[0].contentWindow);
console.log(document.getElementsByName('iframe')[0].contentDocument.defaultView);

请问Chrome的问题是什么?我真的不明白为什么一个用户脚本比一个普通脚本对javascript的访问要少,这意味着什么?顺便说一下,是的,iframe在同一个域和协议上:(

Chrome不支持UnsafeWindow,请尝试TamperMonkey,非常确定它提供对该变量的只读访问

contentWindow.document不可用于Chrome。contentDocument应该可以工作

此外,跨域的XMLHttpRequest也不受支持。其中大多数是出于安全目的。Chrome中的用户脚本是内容脚本,它们无法访问由网页或其他内容脚本定义的函数/变量。它主要用于脚本的安全和隔离,以防止脚本相互冲突

至于document.getElementsByName('iframe')[0].contentWindow,我认为这是因为您尝试在iframe中添加内容的方式。对于初学者,不要将iframe命名为“iframe”,这始终是一种非常糟糕的做法

要尝试将其添加到正文的innerHTML中,请使用appendChild(),并将新的iframe对象追加到document.body中。此外,请尝试document.body.getElementsByName,而不是document.getElementsByName


我为firefox编写greasemonkey脚本,Chrome似乎限制太多。我希望您了解用户脚本的位置黑客。请查看。您可以在您的用户脚本中使用Javascript;),现在我要提醒您,不要弄乱iFrame和用户脚本。我已经为Greasemonkey编写了一个脚本,尝试了6个月,但不知何故,当我在iframe中包含代码时,有一半的时间,结果是未定义的,我从未遇到javascript的问题。此外,如果您从userscripts将.js脚本对象注入到文档中,新代码仍然会受到某种影响,因此元素如何随机显示为未定义。经过6个月的尝试,我放弃了,我只有一个bookmarklet,它只是将一个.js脚本手动注入到文档中。当然,您不必这样做,您只需使用位置黑客从用户脚本注入代码即可。但是,对于基于iFrame的用户脚本编写整个脚本,我还远远没有…

我相信注入可以做到这一点,但是为什么GChrome会有这样的行为呢?这是一个bug,还是故意的?关于脚本约定和有效的脚本-我知道,我写的很简单,你看,写它的好方法在这种情况下不会改变任何东西。而且,Chrome已经支持unsafeWindow,它将所有扩展包括在(function(unsafeWindow){})(window)中,目前我正在双重注入(第一个脚本被注入到当前文档中,它将主脚本注入到iframe中,然后他们都从文档中删除自己),如果失败,我肯定会尝试那个位置黑客。“那么,如何随机地将元素显示为未定义的?”-也许你编写的代码是在原始窗口的作用域中运行的。当你使用多个作用域时,很容易出错。啊,谢谢你提供的信息。祝你的脚本好运,我会看看是否可以插入iframe。位置黑客非常有用。丑陋,但如此简单和诱人。就像黑暗面一样。
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:14 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:15 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:16 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:17 undefined
chrome-extension://eelclpmekkanegjojjmaldeddncficoj/script.js:18 undefined