Ответ 1
Если родительская страница A и страница iframe B находятся в разных доменах, вы не сможете получить доступ к методам или полям через родительское свойство B, и script в не сможет попасть в контент B и не будет вы можете обмениваться глобальными переменными между A и B. Эта граница, расположенная между страницами A и страницей B, является ключевой частью модели безопасности браузера. Это то, что мешает evil.com обернуть вашу веб-страницу онлайн-банка и украсть информацию об учетной записи, просто прочитав внутренние переменные javascript веб-страницы банка.
Если у вас есть роскошь, требующая браузера последнего поколения, вы можете использовать технику postmessage, упомянутую в одном из других ответов здесь. Если вам необходимо поддерживать старые браузеры, вы можете передавать небольшие объемы информации с использованием методов межсайтового клиентского скриптинга в браузере. Одним из примеров этого является использование iframes для передачи информации между внешней страницей A и внутренней страницей B. Это непросто и есть много шагов, но это можно сделать. Я написал статью об этом некоторое время назад.
Вы не сможете отслеживать клики в B iframe с родительской страницы A. Это нарушение правил безопасности браузера на нескольких уровнях. (Нажмите захват для одного). Вы не сможете увидеть, когда изменяется B-URL. A может записать свойство iframe.src для изменения URL-адреса, но как только iframe.src указывает на другой домен, чем домен A, A больше не может читать свойство iframe.src.
Если A и B находятся в разных поддоменах одного и того же корневого домена, у вас может быть возможность "снизить" домен до общего корня. Например, если внешняя страница A размещена в субдомене A.foo.bar.com и B размещена в субдомене foo.bar.com, вы можете опустить домен на странице A на foo.bar.com(путем присвоения window.domain = "foo.bar.com" в script). Затем страница A будет вести себя как одноранговый узел страницы B, и тогда они могут получить доступ к другим данным по мере необходимости, даже если A технически обслуживается из другого домена, чем B. Я написал статью о опускание домена.
Опускание домена может только отслаивать внутренние субдомены для работы в контексте корневого домена. Вы не можете изменить A.foo.bar.com на abc.com.
Существует также небольшой риск снижения домены в общем корневом домене. Когда вы управляете своей страницей в своем собственном субдомене, ваши html и script отделяются от других поддоменов от общего корневого домена. Если сервер в одном из других поддоменов скомпрометирован, это не влияет на вашу html-страницу.
Если вы понижаете свой домен страницы до общего корневого домена, вы подвергаете свои внутренние функции script запуску в общем корневом домене и script из других поддоменов, которые также снизили свой домен до общего корня. Если сервер в одном из других поддоменов скомпрометирован, он будет иметь доступ к вашим внутренним компонентам script и, следовательно, может также скомпрометировать ваш поддомен.