[javascript] Доступ к родительскому URL из iframe


Answers

Да, доступ к URL родительской страницы не разрешен, если iframe и основная страница не находятся в одном и том же (под) домене. Однако, если вам просто нужен URL-адрес главной страницы (то есть URL-адрес браузера), вы можете попробовать следующее:

var url = (window.location != window.parent.location)
            ? document.referrer
            : document.location.href;

Заметка:

window.parent.location разрешено; он избегает ошибки безопасности в OP, вызванной доступом к свойству href : window.parent.location.href вызывает «Заблокировать кадр с началом ...»

document.referrer ссылается на «URI страницы, связанной с этой страницей». Это может не возвращать содержащийся документ, если какой-либо другой источник определяет местоположение iframe , например:

  • Контейнер iframe @ Домен 1
  • Отправляет дочерний iframe в домен 2
  • Но в дочернем iframe ... Domain 2 перенаправляется в Domain 3 (т. Е. Для аутентификации, может быть, SAML), а затем Domain 3 направляет обратно в Domain 2 (т. Е. Через форму отправки (), стандартную технику SAML)
  • Для дочернего iframe document.referrer будет Domain 3 , а не содержащим домен 1

document.location относится к «объекту Location, который содержит информацию о URL-адресе документа»; предположительно текущий документ, то есть iframe в настоящее время открыт. Когда window.location === window.parent.location , то href iframe совпадает с href содержащего родителя.

Question

Хорошо, у меня есть страница, и на этой странице у меня есть iframe. Мне нужно сделать это на странице iframe, узнать, какой URL-адрес главной страницы.

Я искал вокруг, и я знаю, что это невозможно, если моя страница iframe находится в другом домене, поскольку это межсайтовый скриптинг. Но везде, где я читал, говорится, что если страница iframe находится в том же домене, что и родительская страница, она должна работать, если я, например,

parent.document.location
parent.window.document.location
parent.window.location
parent.document.location.href

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

В любом случае, вот в чем проблема. Мой iframe находится в том же домене, что и на главной странице, но не в том же SUB-домене. Так, например, у меня есть

http: // www.mysite.com/pageA.html

а затем мой URL-адрес iframe

http: // qa-www.mysite.com/pageB.html

Когда я пытаюсь захватить URL-адрес с pageB.html (на странице iframe), я все равно получаю ту же ошибку отказа в доступе. Таким образом, кажется, что даже поддомены считаются межсайтовыми скриптами, правильно ли это, или я делаю что-то неправильно?




Я нашел в случаях, когда $_SERVER['HTTP_REFERER'] не работает (я смотрю на вас, Safari), $_SERVER['REDIRECT_SCRIPT_URI'] был полезной резервной копией.




Я не мог получить предыдущее решение для работы, но я узнал, что если я установил iframe scr, например, http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder тогда я мог бы в выписке iframe thisdomain.com/thisfolder , используя следующий javascript:

var myString = document.location.toString();
var mySplitResult = myString.split("=");
fromString = mySplitResult[1];



Если ваш iframe из другого домена (перекрестный домен), вам просто нужно будет использовать это:

var currentUrl = document.referrer;

и - здесь у вас есть главный url!




Получить все родительские функции iframe и HTML

var parent = $(window.frameElement).parent();
        //alert(parent+"TESTING");
        var parentElement=window.frameElement.parentElement.parentElement.parentElement.parentElement;
        var Ifram=parentElement.children;      
        var GetUframClass=Ifram[9].ownerDocument.activeElement.className;
        var Decision_URLLl=parentElement.ownerDocument.activeElement.contentDocument.URL;



var url = (window.location != window.parent.location) ? document.referrer: document.location;

Я обнаружил, что приведенный выше пример предположил, что ранее работал, когда скрипт выполнялся в iframe, однако он не извлекал URL-адрес, когда скрипт выполнялся вне iframe, требовалась небольшая корректировка:

var url = (window.location != window.parent.location) ? document.referrer: document.location.href;



Related