以下是从iFrame获取父窗口URL的Google Chrome版本。window.location.ancestorOrigins;我正在寻找相当于上述声明的火狐和IE浏览器。是否有可能实现。尝试使用document.referrer也只给出iFrame URL。
document.referrer
f1tvaqid1#
不幸的是,Firefox和IE没有与祖先起源等效的版本。获取父URL的最佳方法是document.referrer,不幸的是,如果您正在处理iframe,这意味着您可能无法访问外部页面并获取网页的真实URL。
xzv2uavs2#
我做了这样的事情:
function getAncestorOrigins() { if (location.ancestorOrigins !== undefined) { return [...location.ancestorOrigins]; } const urls = []; let parentWin = window; while (parentWin !== window.top) { if (parentWin.document.referrer) { try { const url = new URL(parentWin.document.referrer); urls.push(url.origin); } catch (e) { // console.error } } // @ts-ignore parentWin = parentWin.parent; } return urls; }
字符串
xmq68pz93#
我找到了另一个解决方案。这对我来说很有效...
var url = window.location != window.parent.location ? document.referrer : document.location.href;
yyyllmsg4#
This is a known bug in Firefox
gzszwxb45#
一种方法是检查window.parent[0].top.document是否存在。如果在查询这个对象时没有得到错误,则假定它在同一个域中,否则假定它在不同的域中。
window.parent[0].top.document
var origins = location.ancestorOrigins; if ( ! origins ) { origins = { "length": 1 }; try { if ( window.parent[0].top.document ) // Chrome & Firefox (same domain) origins[0] = location.origin; } catch(err) { // Firefox (different domains CORS policy) origins[0] = "*"; // force any domain }; }; console.log( origins, location.origin ) if ( origins[ origins.length -1 ] == location.origin ) { // same domain alert("Hello word!"); } else { // different domains var message = 'alert("Hello word!");'; window.parent.postMessage( message, origins[ origins.length -1 ] ); };
5条答案
按热度按时间f1tvaqid1#
不幸的是,Firefox和IE没有与祖先起源等效的版本。
获取父URL的最佳方法是
document.referrer
,不幸的是,如果您正在处理iframe,这意味着您可能无法访问外部页面并获取网页的真实URL。xzv2uavs2#
我做了这样的事情:
字符串
xmq68pz93#
我找到了另一个解决方案。这对我来说很有效...
字符串
yyyllmsg4#
This is a known bug in Firefox
gzszwxb45#
一种方法是检查
window.parent[0].top.document
是否存在。如果在查询这个对象时没有得到错误,则假定它在同一个域中,否则假定它在不同的域中。
字符串