Есть ли простой способ получить текущий URL-адрес из iframe?
Зритель просматривал несколько сайтов. Полагаю, я бы использовал что-нибудь в javascript.
Ответы:
По соображениям безопасности вы можете получить 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;
}
}