Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Если родительская страница A и страница iframe B находятся в разных доменах, вы не сможете получить доступ к методам или полям через родительское свойство B, и скрипт в A не сможет попасть в контент B, и вы не будете способный обмениваться глобальными переменными между A и B. Эта граница, размещенная между страницами A и страницей B, является ключевой частью модели безопасности браузера. Это то, что мешает evil.com обернуть вашу веб-страницу онлайн-банка и украсть информацию об учетной записи, просто прочитав внутренние переменные javascript веб-страницы банка.
Если у вас есть роскошь, требующая последнего поколения браузеров, вы можете использовать технику postmessage, упомянутую в одном из других ответов здесь. Если вам необходимо поддерживать старые браузеры, вы можете передавать небольшие объемы информации с использованием методов межсайтового клиентского скриптинга в браузере. Одним из примеров этого является использование iframe для передачи информации между внешней страницей A и внутренней страницей B. Это непросто, и есть много шагов, но это можно сделать. Я написал статью об этом некоторое время назад.
Вы не сможете отслеживать клики в iframe B с родительской страницы A. Это нарушение правил безопасности браузера на нескольких уровнях , (Нажмите захват для одного). Вы не сможете увидеть, когда изменяется URL-адрес B. 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" в сценарии A). Затем страница A будет вести себя как одноранговый узел страницы B, и тогда они могут получить доступ к данным друг друга по мере необходимости, даже если A технически обслуживается из другого домена, чем B. Я написал статью о снижении домена .
Опускание домена может только отслаивать внутренние субдомены для работы в контексте корневого домена. Вы не можете изменить A.foo.bar.com на abc.com.
Также существует небольшой риск снижения домены в общем корневом домене. Когда вы управляете своей страницей в своем собственном субдомене, ваш html и скрипт отделены от других субдоменов от общего корневого домена. Если сервер в одном из других поддоменов скомпрометирован, это не влияет на вашу html-страницу.
Если вы опускаете домен вашей страницы в общий корневой домен, вы подвергаете свои внутренности сценарию, запущенному в общем корневом домене, и скрипту из других поддоменов, который также снизил свой домен до общего корня. Если сервер в одном из других поддоменов скомпрометирован, он будет иметь доступ к внутренним функциям вашего скрипта и, следовательно, может также скомпрометировать ваш поддомен.
Если вы хотите установить связь между фреймами в javascript, вы можете использовать «parent»:
Если кадр A имеет переменное значение, например:
var orderNo = 2;
Для кадра B до прочитайте это, он будет ссылаться на
var frameA_orderNo = parent.frames[0].orderNo;
(если предположить, что кадр A объявлен первым фреймом)
Таким образом, вы можете настроить глобальные переменные в каждом кадре, который может читать другой кадр и поэтому вы можете получить порядок # в старомодном javascript (никогда не пробовали его в jquery).
Wow frames - никогда не думал, что я снова о них подумаю.
в случае, если страница & amp; кадр не находится в одном домене, вам придется использовать postmessage , поскольку политика одного домена запрещает нормальную javascript-связь между страницами / кадрами разных доменов из-за проблем с безопасностью.
postmessage является частью html5, а работает во всех современных браузерах (включая IE8) . если вам нужна поддержка старых браузеров (в частности, IE6 / 7), вы можете использовать плагин postgessage jQuery (который прозрачно возвращается к некоторой хитрости тэгов хэш-тегов для старых браузеров).
и как побочный элемент: не уверены, что фреймы злы, есть некоторые проблемы (юзабилити, SEO, ...), связанные с ними, но я сделал некоторые исследования и большинство из них можно решить я думаю.
window.domain = "foo.bar.com"
Я думаю, вы имели в видуdocument.domain = "foo.bar.com"
– tokland 21 March 2017 в 11:35