Запуск букмарклета на iFrame из другого домена - PullRequest
16 голосов
/ 19 декабря 2010

Есть ли способ запустить букмарклет на iFrame из другого домена?

Например, у меня загружена страница с http://example.com,, в которой есть iFrame, источник которого установлен на http://example2.com. Когда я запускаю букмарклет, он всегда запускается на http://example.com, так как это главная страница. Я хочу запустить его на другом iFrame.

Когда я пытаюсь взаимодействовать с iFrame (например, изменяя его атрибут источника на javascript:alert('test')), Chrome показывает следующую ошибку:

Небезопасная попытка JavaScript для доступа к фрейму с URL http://example.com из фрейма с URL http://example2.com. Домены, протоколы и порты должны совпадать.

Я пытался перетащить букмарклет в рамку, но там написано:

Не удалось загрузить ресурс

Можно ли как-нибудь взаимодействовать с iFrame, используя букмарклет в Chrome?

Ответы [ 3 ]

3 голосов
/ 10 января 2011

Существует способ сделать междоменную передачу сообщений (не выполнение произвольного кода), используя window.postMessage, но все кадры A могут сделать для кадра B (когда они не относятся к того же источника ) передает ему сообщение, надеясь, что B имеет функцию обратного вызова, прослушивающую это сообщение.

Так что здесь, если вы управляете instancele2.com (то, что находится в кадре, не получаетбукмарклет), вы можете заставить букмарклет передавать сообщение в iframe и обрабатывать его в iframe.

Иначе я не думаю, что у вас есть решение, кроме очень сложных (например, проксирование).

Другие ссылки:

1 голос
/ 29 июня 2012

Один из вариантов, если вы не управляете страницей или iframe - это загрузить iframe в новое окно.Атрибут src iframe доступен для чтения родительским JS, который затем может открыть новую вкладку или окно.Затем пользователь может нажать на букмарклет во второй раз, чтобы загрузить его на эту новую страницу.

1 голос
/ 19 декабря 2010

iFrames обладают достаточной безопасностью, как и вызовы ajax.

Любая попытка использовать их в междоменном режиме приведет к ошибке безопасности.

Представьте, что вы могли взаимодействовать с другими iFrames в разных доменах. Вы сможете создать iFrame (например, страницу входа в Facebook) с шириной и высотой 100% и добавить функцию для выполнения события отправки, которая будет отправлять вам имя пользователя по электронной почте и передавать перед отправкой.

Так что у тебя будет много проблем с выполнением того, что ты пытаешься сделать. Вы в основном не можете связываться со страницей, которой вы не владеете. Вы можете использовать firebug для редактирования с помощью вкладки html.

Надеюсь, что поможет

...