JS - iframe получить параметры строки запроса запроса [duplicate]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

18
задан Francisco Noriega 11 June 2014 в 18:30
поделиться

3 ответа

Если родительская страница 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-страницу.

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

25
ответ дан dthorpe 19 August 2018 в 03:57
поделиться

Если вы хотите установить связь между фреймами в javascript, вы можете использовать «parent»:

Если кадр A имеет переменное значение, например:

var orderNo = 2;

Для кадра B до прочитайте это, он будет ссылаться на

var frameA_orderNo = parent.frames[0].orderNo;

(если предположить, что кадр A объявлен первым фреймом)

Таким образом, вы можете настроить глобальные переменные в каждом кадре, который может читать другой кадр и поэтому вы можете получить порядок # в старомодном javascript (никогда не пробовали его в jquery).

Wow frames - никогда не думал, что я снова о них подумаю.

2
ответ дан amelvin 19 August 2018 в 03:57
поделиться
  • 1
    Благодаря! Я знаю, что так и думал! О настройке переменных ... Я не очень много работал с javascript. Как бы мне сделать, чтобы настроить глобальные переменные? Благодаря! – Francisco Noriega 3 April 2010 в 01:23
  • 2
    Пока вы не ставите переменные в функцию, у них будет область страницы, поэтому просто объявите их в верхней части javascript, и они будут доступны. Также тот же метод должен позволить вам запускать методы в другом фрейме, например parent.frames [0] .methodname (); – amelvin 3 April 2010 в 23:42
  • 3
    Спасибо, мне придется подождать до понедельника, чтобы попробовать / принять :) – Francisco Noriega 4 April 2010 в 05:51
  • 4
    @bangoker Вы попробовали? – amelvin 13 April 2010 в 12:35

в случае, если страница & amp; кадр не находится в одном домене, вам придется использовать postmessage , поскольку политика одного домена запрещает нормальную javascript-связь между страницами / кадрами разных доменов из-за проблем с безопасностью.

postmessage является частью html5, а работает во всех современных браузерах (включая IE8) . если вам нужна поддержка старых браузеров (в частности, IE6 / 7), вы можете использовать плагин postgessage jQuery (который прозрачно возвращается к некоторой хитрости тэгов хэш-тегов для старых браузеров).

и как побочный элемент: не уверены, что фреймы злы, есть некоторые проблемы (юзабилити, SEO, ...), связанные с ними, но я сделал некоторые исследования и большинство из них можно решить я думаю.

7
ответ дан futtta 19 August 2018 в 03:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: