调用在(xul)浏览器元素中定义/链接的javascript函数

时间:2011-12-13 12:28:41

标签: javascript browser xul xulrunner

我正在开发一个包含浏览器元素的XUL应用程序。此浏览器元素为type="content",因此无法使用浏览器中的JavaScript访问XUL元素。这不仅仅是好的,但必须是这样的。

我现在的问题是我无法从XUL元素访问浏览器元素中定义的函数。

有什么办法可以调用在浏览器元素中定义或链接的函数吗?

1 个答案:

答案 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并返回到另一侧,没有任何“恶意”可以通过。