par*_*err 9 javascript firefox-addon
Firefox扩展(工具栏)是否可以访问文档的变量?详细解释如下..
加载文件:
<script type="text/javascript">
var variableForExtension = 'something';
</script>
Run Code Online (Sandbox Code Playgroud)
延期:
var win = window.top.getBrowser().selectedBrowser.contentWindow;
alert(win.variableForExtension); // undefined
Run Code Online (Sandbox Code Playgroud)
这是第一件尝试,由于安全机制(XPCNativeWrapper),这种方式无法访问.我已经阅读过关于通过wrappedJSObject访问它并使用事件(将侦听器添加到文档并从扩展中调度事件),但没有运气.但是并没有太努力.所以,在我深入挖掘之前('事件方法'听起来像是一种方式),我想知道这是否可能?
谢谢
Nic*_*lay 15
是的,访问内容中的JS变量始终是可行的.在较旧的Firefox版本中,这种天真的方式并不安全(在某种意义上,恶意网页可以获得chrome特权).
1)如果您控制网页并希望将信息传递给扩展程序,您确实应该使用事件技术.这在所有Firefox版本中都很有效.
2)如果要从内容文档中读取值,可以绕过XPCNativeWrapper:
var win = window.top.getBrowser().selectedBrowser.contentWindow;
// By the way, this could just be
// var win = content;
// or
// var win = gBrowser.contentWindow;
alert(win.variableForExtension); // undefined
win.wrappedJSObject.variableForExtension // voila!
Run Code Online (Sandbox Code Playgroud)
这在Firefox 3之前是不安全的.在Firefox 3及更高版本中可以使用,你会得到另一种包装器(XPCSafeJSObjectWrapper),它看起来与从内容页面到你的代码的对象相同,但确保赢得内容页面不能做任何恶意的事情.
3)如果你需要在内容网页中调用一个函数或在页面的上下文中运行你自己的代码,那就更复杂了.有人在其他地方多次询问和回答,但遗憾的是从未完全记录过.由于这与您的问题无关,因此我不会详细介绍.
归档时间: |
|
查看次数: |
6959 次 |
最近记录: |