Чи існує простий спосіб отримати поточну 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
У мене виникла проблема з URL-адресами BLOB-об'єктів hrefs. Отже, з посиланням на 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
Якщо ви знаходитесь у внутрішньому фреймі, який не має міждоменного 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;
}
}