Как вы уже отметили, невозможность прямого доступа к контенту является функцией безопасности.Если вы хотите только вызвать функцию, но не заинтересованы в возвращаемом значении, тогда наиболее простым и безопасным подходом было бы загрузить javascript:
URL в этот браузер:
myBrowser.contentWindow.location.href = "javascript:void someFunction()";
Если вам нужнополучить данные обратно, тогда сделать это безопасно сложно (все, что связано с wrappedJSObject
, небезопасно).Вероятно, лучше использовать диспетчер сообщений .Вы можете загрузить скрипт содержимого в браузер (не проверенный, просто иллюстрирующий точку):
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 и обратно с другой стороны, ничего «злонамеренного» не пройдет.