我已经得到了与谷歌浏览器UserScripts一个小问题,要精确与得到的iframe的对象窗口。通过谷歌浏览器的控制台非常可行的,通过UserScript左右,非常不可能的,似乎至今。说实话,它好像是故意的,因为如果有某种原因,为什么我不能访问其他窗口对象。

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-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

也许我问Chrome的问题是什么?我真的不明白为什么要UserScript有较小的访问的JavaScript比正常的脚本,会造成什么影响?顺便说一句,没错,iframe是在同一个域和协议。 :(

有帮助吗?

解决方案

UnsafeWindow不支持Chrome浏览器,尝试TamperMonkey,肯定它提供了只读变量的访问。

contentWindow.document不可用于浏览器。 contentDocument应该工作。

另外,XMLHttpRequest进行跨域也不被支持。其中大部分是用于安全目的。在Chrome Userscripts的内容脚本,他们无法访问的网页或其他内容脚本定义的函数/变量。它主要用于脚本的安全性和隔离,防止脚本从相互冲突。

至于document.getElementsByName(“IFRAME”)[0] .contentWindow,我想这是因为你想在你的iframe中添加的方式。对于初学者来说,不要对你的iframe为“IFRAME”,始终是一个非常不好的做法。

相反,以试图将其添加到体内的innerHTML,使用的appendChild(),和一个新的iframe对象追加到document.body的。此外,代替document.getElementsByName,尝试document.body.getElementsByName。

我写的Firefox Greasemonkey脚本,和Chrome似乎过于严格。我希望你知道的位置黑客的userscripts。请查看 http://wiki.greasespot.net/Location_hack 。您可以在userscripts使用JavaScript;),只是让你知道,现在,我就非常警惕借助iframe和userscripts搞乱。我已经写了一个脚本Greasemonkey的,一直在努力为6个月,但不知何故,当我涉及到的iframe代码里面,一半的时候,那结果是不确定的,我从来没有与JavaScript的这个问题。另外,如果你注入的.js脚本对象到从userscripts的文档时,新的代码仍然以某种方式影响,所以如何,随机,元素显示为未定义。 6个月后尝试,我放弃了,我只是有一个书签只是注入一个.js脚本到文档中手动。当然,你没有做到这一点,你可以只使用一个位置,黑客从userscript注入的代码。但是,作为编写基于userscripts的I帧的整个脚本,我住在很远很远......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top