我正在开发一个包含浏览器元素的XUL应用程序。此浏览器元素为type="content"
,因此无法使用浏览器中的JavaScript访问XUL元素。这不仅仅是好的,但必须是这样的。
我现在的问题是我无法从XUL元素访问浏览器元素中定义的函数。
有什么办法可以调用在浏览器元素中定义或链接的函数吗?
答案 0 :(得分:3)
正如您已经指出的那样,无法直接访问内容是一项安全功能。如果您只想调用函数但对返回值不感兴趣,那么最简单和安全的方法是将javascript:
URL加载到该浏览器中:
myBrowser.contentWindow.location.href = "javascript:void someFunction()";
如果您需要获取数据,那么安全地执行此操作会很复杂(任何涉及wrappedJSObject
的内容本质上都是不安全的)。最好使用message manager。您可以将内容脚本加载到浏览器中(未经测试,仅举例说明这一点):
myBrowser.messageManager.loadFrameScript("chrome://.../contentScript.js", false);
myBrowser.messageManager.addMessageListener("result", function(name, sync, data)
{
alert("Got response from content script: " + data);
});
contentScript.js
看起来像这样:
var result = someFunction();
sendAsyncMessage("result", result);
请注意,contentScript.js
具有内容权限,这意味着利用它不会为网页提供任何内容。并且它发送的数据将转换为JSON并返回到另一侧,没有任何“恶意”可以通过。