Есть ли простой способ получить текущий URL-адрес из iframe?
Зритель просматривал несколько сайтов. Полагаю, я бы использовал что-нибудь в javascript.
javascript
url
iframe
Крис
источник
источник
Ответы:
По соображениям безопасности вы можете получить URL-адрес только до тех пор, пока содержимое iframe и ссылочный javascript обслуживаются из одного домена. Пока это правда, будет работать что-то вроде этого:
document.getElementById("iframe_id").contentWindow.location.href
Если два домена не совпадают, вы столкнетесь с ограничениями безопасности межсайтовых ссылок сценариев.
См. Также ответы на аналогичный вопрос .
источник
sandbox="allow-same-origin"
в iFrame?Если ваш iframe из другого домена (кросс-домен), другие ответы вам не помогут ... вам просто нужно будет использовать это:
var currentUrl = document.referrer;
и - вот и основной URL!
источник
Надеюсь, это поможет каким-то образом в вашем случае, я столкнулся с той же проблемой и просто использовал localstorage для обмена данными между родительским окном и iframe. Итак, в родительском окне вы можете:
localStorage.setItem("url", myUrl);
И в коде, где источник iframe просто получает эти данные из localstorage:
localStorage.getItem('url');
Сэкономил много времени. Насколько я понимаю, единственным условием является доступ к коду родительской страницы. Надеюсь, это кому-то поможет.
источник
Если вы находитесь в контексте iframe,
ты мог бы сделать
const currentIframeHref = new URL(document.location.href); const urlOrigin = currentIframeHref.origin; const urlFilePath = decodeURIComponent(currentIframeHref.pathname);
Если вы находитесь в родительском окне / фрейме, вы можете использовать ответ https://stackoverflow.com/a/938195/2305243 , который
document.getElementById("iframe_id").contentWindow.location.href
источник
У меня возникла проблема с href-адресами blob-адресов. Итак, со ссылкой на iframe, я просто создал URL-адрес из атрибута src iframe:
const iframeReference = document.getElementById("iframe_id"); const iframeUrl = iframeReference ? new URL(iframeReference.src) : undefined; if (iframeUrl) { console.log("Voila: " + iframeUrl); } else { console.warn("iframe with id iframe_id not found"); }
источник
Дополнительная информация для тех, кто борется с этим:
Вы получите нулевые значения, если попытаетесь получить URL-адрес из iframe до его загрузки. Я решил эту проблему, создав весь iframe в javascript и получив нужные мне значения с помощью функции onLoad:
var iframe = document.createElement('iframe'); iframe.onload = function() { //some custom settings this.width=screen.width;this.height=screen.height; this.passing=0; this.frameBorder="0"; var href = iframe.contentWindow.location.href; var origin = iframe.contentWindow.location.origin; var url = iframe.contentWindow.location.url; var path = iframe.contentWindow.location.pathname; console.log("href: ", href) console.log("origin: ", origin) console.log("path: ", path) console.log("url: ", url) }; iframe.src = 'http://localhost/folder/index.html'; document.body.appendChild(iframe);
Из-за политики одного и того же происхождения у меня были проблемы при доступе к фреймам с перекрестным происхождением - я решил это, запустив локальный веб-сервер вместо запуска всех файлов прямо с моего диска. Чтобы все это работало, вы должны иметь доступ к iframe с тем же протоколом, именем хоста и портом, что и источник. Не уверен, что из этого было / отсутствовало при запуске всех файлов с моего диска.
Также подробнее об объектах локации: https://www.w3schools.com/JSREF/obj_location.asp
источник
Если вы находитесь внутри iframe, у которого нет междоменного src, или src пуст:
Затем:
function getOriginUrl() { var href = document.location.href; var referrer = document.referrer; // Check if window.frameElement not null if(window.frameElement) { href = window.frameElement.ownerDocument.location.href; // This one will be origin if(window.frameElement.ownerDocument.referrer != "") { referrer = window.frameElement.ownerDocument.referrer; } } // Compare if href not equal to referrer if(href != referrer) { // Take referrer as origin return referrer; } else { // Take href return href } }
Если вы находитесь внутри iframe с перекрестным доменом src:
Затем:
function getOriginUrl() { var href = document.location.href; var referrer = document.referrer; // Detect if you're inside an iframe if(window.parent != window) { // Take referrer as origin return referrer; } else { // Take href return href; } }
источник