Боковая панель Firefox и объект документа DOM - PullRequest
3 голосов
/ 28 сентября 2008

В боковой панели Firefox загружена веб-страница, а в основной документ загружена другая веб-страница. Теперь, как мне попросить получить доступ к основному объекту документа через боковую панель Firefox? Было бы полезно сделать это с помощью кода Javascript в документе боковой панели firefox для доступа к основному документу.

Спасибо за ответы. Однако я должен уточнить свой вопрос. В главном окне загружена веб-страница, а на боковой панели - веб-страница. Я хочу, чтобы окно боковой панели знало, какой текст был выбран пользователем в главном окне при нажатии на ссылку в окне боковой панели. Я знаю, как получить выделенный текст из окна. Только то, что элемент боковой панели усложняет проблему, которую я не могу превзойти.

@ PConory:

Мне нравится ваш ответ, но когда я пытаюсь это сделать, появляется ошибка:

Ошибка: отказано в разрешении на создание оболочки для объекта класса UnnamedClass.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 28 сентября 2008

Насколько я могу судить, вы загружаете веб-сайт на боковой панели (отметьте «Загрузить эту закладку на боковой панели»). Если это так, И если боковая панель открывает страницу главного окна. Вы можете использовать window.postMessage для связи между ними. Но, как я уже сказал, страница боковой панели должна открывать главную страницу, потому что вам нужна ссылка на окно, чтобы опубликовать сообщение.

sidebar.js

var newwin = window.open('http://otherpage')
newwin.onload = function()
{
 newwin.postMessage('Hey newwin', 'http://sidebar');
};

mainpage.js
window.addEventListener('message',function(e)
{
 if(message.origin == 'http://sidebar')
  alert('message from sidebar');
},false);

Используя это, вы по-прежнему не имеете доступа к документу, но можете общаться между ними и записывать любые изменения, которые вы хотите сделать.

РЕДАКТИРОВАТЬ: Еще немного подумав, если вы откроете окно с боковой панели, у вас будет DOM для него. var newwin = window.open ('бла'); newwin.document, делающий дыру в PostMessage довольно бессмысленной.

1 голос
/ 28 сентября 2008

Вы пытаетесь написать на странице javascript, который позволит осуществлять связь между страницей боковой панели и страницей вкладок? Существуют ограничения на то, какие страницы могут видеть друг друга и общаться:

  • Если страницы не находятся в одном домене, им запрещено общаться (ограничение одного домена).
  • Если одна страница не открыла другую, ни одна из страниц не может получить ссылку на другую.

Я не уверен, как страница может запросить открытие страницы на боковой панели, или наоборот. Но если вы можете управлять этим, используйте var child = window.open(...), чтобы получить ссылку в одном направлении и window.opener, чтобы получить ссылку в другом направлении.

1 голос
/ 28 сентября 2008

Доступ к главному окну с боковой панели намного сложнее, чем вернуться назад.

Дерево DOM, которое вам необходимо пройти, согласно Центру разработчиков Mozilla , равно:

#document
  window                 main-window
    ...
      browser
        #document
          window         sidebarWindow

По приведенной выше ссылке следующий код позволит вам добраться до объекта mainWindow:

var mWin = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
               .getInterface(Components.interfaces.nsIWebNavigation)
               .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
               .rootTreeItem
               .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
               .getInterface(Components.interfaces.nsIDOMWindow); 
...