Javascript 检测包含iframe的页面的URL
“我的网站”提供了通过iframe(类似于Youtube或任何其他视频门户)嵌入来自我的网站的视频的功能 然而,有没有一种方法可以准确地检测出哪个网站将我的网站作为iframe 在iframe嵌入中尝试,尝试检测父项的URLJavascript 检测包含iframe的页面的URL,javascript,html,Javascript,Html,“我的网站”提供了通过iframe(类似于Youtube或任何其他视频门户)嵌入来自我的网站的视频的功能 然而,有没有一种方法可以准确地检测出哪个网站将我的网站作为iframe 在iframe嵌入中尝试,尝试检测父项的URL if (window !== window.top) { console.log(window.top.location.href); console.log(window.parent.location.href); } 但结果是一个错误 Uncau
if (window !== window.top) {
console.log(window.top.location.href);
console.log(window.parent.location.href);
}
但结果是一个错误
Uncaught DOMException: Blocked a frame with origin "https://myurl.com" from accessing a cross-origin frame.
at console.log (<anonymous>)
at https://www.myurl.com/embed/1544401:20:21
Uncaught DomeException:阻止了具有原点的帧”https://myurl.com“从访问交叉原点帧。
在console.log()上
在https://www.myurl.com/embed/1544401:20:21
有解决办法吗
UPD。通过使用
文档解决。referer
您无法使用JavaScript访问具有不同来源的
,如果您可以这样做,这将是一个巨大的安全漏洞。对于同源策略浏览器,阻止脚本尝试访问具有不同来源的帧
您可以使用window.postMessage
及其相关消息事件在两个页面之间发送消息来解决此问题,如下所示:
//在主页中
const frame=document.getElementById('your-frame-id');
frame.contentWindow.postMessage(/*此处的任何变量或对象*/,'http://your-second-site.com');
//在您的中(包含在主页中):
window.addEventListener('message',event=>{
//重要提示:检查数据的来源!
if(event.origin.startsWith('http://your-first-site.com')) {
//数据是从您的站点发送的。
//使用postMessage发送的数据存储在event.Data中:
console.log(事件数据);
}否则{
//数据不是从您的站点发送的!
//小心!不要用它。这是另一个分支
//为了清楚起见,你通常不需要它。
返回;
}
});代码>问题是主页不属于我,我想在我的iframe(属于我的网站)中检测它的url。Youtube不知怎么做到了。。。