Вызовите функцию javascript, которая определена / связана в элементе браузера (xul) - PullRequest
3 голосов
/ 13 декабря 2011

Я разрабатываю приложение XUL, которое включает в себя элемент браузера.Этот элемент браузера имеет type="content", поэтому доступ к элементам XUL с помощью JavaScript из браузера невозможен.Это не просто нормально, но так и должно быть.

Моя проблема сейчас в том, что я не могу получить доступ к функциям, которые определены в элементе browser, из элементов XUL.

IsЕсть ли способ вызвать функцию, которая определена или связана в элементе браузера?

1 Ответ

3 голосов
/ 13 декабря 2011

Как вы уже отметили, невозможность прямого доступа к контенту является функцией безопасности.Если вы хотите только вызвать функцию, но не заинтересованы в возвращаемом значении, тогда наиболее простым и безопасным подходом было бы загрузить 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 и обратно с другой стороны, ничего «злонамеренного» не пройдет.

...