Как я могу вызвать функцию в родительском элементе iframe, используя Greasemonkey - PullRequest
0 голосов
/ 08 июня 2009

У меня есть скрипт Greasemonkey, который добавляет на страницу iframe (назовите его Page 1). В iframe есть еще одна страница (назовите ее Page 2). Сценарий также выполняется на странице 2. Страницы 1 и 2 находятся в разных доменах.

Я бы хотел, чтобы код, выполняющийся на странице 2, вызывал функцию на странице 1. Возможно ли это, учитывая более низкие ограничения на код Greasemonkey?

1 Ответ

1 голос
/ 08 июня 2009

Браузер предотвратит это, потому что домены разные.

Существует несколько приемов, которые можно использовать для связи между кадрами:

  1. Добавьте запись DNS для другого веб-сайта в домен внешнего веб-сайта (www.somewebsite.com и someapp.somewebsite.com). Затем используйте document.domain = "somewebsite.com" в JavaScript обеих страниц.
  2. Используйте HTML 5 postMessage () для связи между фреймами. Я знаю, что это работает в Firefox 3 и Internet Explorer 8, но не в IE7.
  3. Вы можете передавать простые сообщения на другую страницу, задав URL-адрес родительского окна. Примечание: Похоже, что браузеры запрещают установку родительского URL. Этот метод будет работать только для односторонней связи между родителем и дочерним фреймом.

Объявление 3: Вы не сможете прочитать URL другого фрейма, но вы можете установить его. Если вы измените URL на точно такую ​​же страницу, но с компонентом #anchor к URL, страница фактически не перезагрузится:

window.frames["childFrame"].location.href = "http://www.somewebsite.com/#message"

Затем вам нужно будет добавить скрипт на внешнюю страницу, который регулярно опрашивает ее location.href и обрабатывает сообщения. Да, это некрасиво, но если все сделано правильно, оно будет работать во всех распространенных браузерах.

...