Xpoint
   [напомнить пароль]

_content & Firefox1.5

2005-10-27 10:26:18 [обр] Alexander [досье]
Требуется проверить наличие и запустить js функцию из extension для Firefox. Функция загружается на странице. В firefox 1 работало: window._content.document.myfunction. Но в Firefox 1.5 этот код не работает, _content получить могу но вот свойст у него нет. Подскажите в чем проблема?
спустя 2 часа 21 минуту [обр] Владимир Палант [досье]

_content — недокументированное свойство, определено в browser.xml (XBL). Если в Firefox 1.5 его убрали, то тут нечему удивляться. Насколько я понимаю, свойство content всё ещё осталось (см. http://gemal.dk/blog/2005/09/2......ation_from_inside_a_extension/). Хотя я бы предпочел getBrowser().contentWindow.

Наверное эту тему лучше в раздел XUL.

спустя 20 минут [обр] Alexander [досье]
В FF1.5 getBrowser().contentDocument возвращает XPCNativeWrappered[object HTMLDocument], а в FF1 возвращал просто HTMLDocument. Можно ли у XPCNativeWrappered получить свойства HTMLDocument?
спустя 21 минуту [обр] Alexander [досье]
Я так думаю, что изменения в FF1.5 связаны с повышением безопасности. Поэтому вопрос лучше сформулировать так: как правильно вызвать JS функцию из extension. Т.е. загружается страница с кодом, а из расширения вызывается одна из функций из этого кода.
спустя 4 минуты [обр] Владимир Палант [досье]
Да, именно с этим оно и связано, XPCNativeWrapped убирает все свойства, которые страница переопределила. Добраться до исходного объекта наверняка можно, надо будет посмотреть...
спустя 8 часов [обр] Данил Иванов [досье]

Alexander[досье] Попробуйте так, м.б. поможет:

function getContent() {
  var cont = getBrowser().contentWindow;
  try {
    cont = new XPCNativeWrapper(cont).wrappedJSObject;
  } catch(e) {}
  return cont;
}

По крайней мере, у себя я использую

getXPCNativeWrappedJSObject: function(tab) {
  return new XPCNativeWrapper(tab.contentDocument.defaultView.document).wrappedJSObject;
},
спустя 11 часов [обр] Alexander [досье]
Спасибо Данил Иванов[досье] все работает. Добавил перед return:
if (!cont) cont = getBrowser().contentWindow;
чтобы работало и в FF1 и в F1.5
Powered by POEM™ Engine Copyright © 2002-2005