有没有一种简单的方法可以从iframe获取当前网址?
观众将浏览多个站点。我猜我会在javascript中使用某些东西。
Answers:
出于安全原因,您只能获取iframe的内容以及引用javascript来自同一域的时间。只要这是对的,这样的事情就会起作用:
document.getElementById("iframe_id").contentWindow.location.href
如果两个域不匹配,则会遇到跨站点引用脚本安全性限制。
另请参见类似问题的答案。
sandbox="allow-same-origin"
到iFrame怎么办?
如果您的iframe来自其他域(跨域),那么其他答案将无济于事...您将只需要使用以下方法:
var currentUrl = document.referrer;
-在这里,您有了主网址!
如果您位于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
我对Blob url hrefs有问题。因此,参考iframe,我只是从iframe的src属性生成了一个网址:
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");
}
一些可能为此苦苦挣扎的人的一些其他信息:
如果尝试在iframe加载之前获取URL,则将获得null值。我通过在javascript中创建整个iframe并使用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);
由于同源策略,在访问“跨源”帧时遇到了问题-我通过在本地运行Web服务器而不是直接从磁盘运行所有文件来解决了这一问题。为了使所有这些正常工作,您需要使用与原始协议,主机名和端口相同的协议访问iframe。当我从磁盘运行所有文件时,不确定其中哪一个丢失。
另外,有关定位对象的更多信息:https : //www.w3schools.com/JSREF/obj_location.asp
如果您位于没有跨域src的iframe内,或者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
}
}
如果您位于具有跨域src的iframe中:
然后:
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;
}
}