我们如何访问 iFrame 信息(在浏览器中右键单击 iFrame -> This Frame -> 查看框架信息)?主要是我想获取引用 URL。
我能够获取地址,contentDocument.location.href
但无法获取其他属性(类型、渲染模式、引用 URL,...)。
顺便说一句,document.referrer
这不是我要寻找的东西。
我们如何访问 iFrame 信息(在浏览器中右键单击 iFrame -> This Frame -> 查看框架信息)?主要是我想获取引用 URL。
我能够获取地址,contentDocument.location.href
但无法获取其他属性(类型、渲染模式、引用 URL,...)。
顺便说一句,document.referrer
这不是我要寻找的东西。
主机页面和 iframe 是否在同一个域中?由于“跨框架通信”在所有现代浏览器中都受到严格限制,我认为没有办法做到这一点。
我没有写这个,也不记得它来自哪里,但它非常有用,它是我一直保留的一个片段:
function parseUri(str) {
var o = parseUri.options,
m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
uri = {},
i = 14;
while (i--) uri[o.key[i]] = m[i] || "";
uri[o.q.name] = {};
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
if ($1) uri[o.q.name][$1] = $2;
});
return uri;
};
parseUri.options = {
strictMode: false,
key: ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"],
q: {
name: "queryKey",
parser: /(?:^|&)([^&=]*)=?([^&]*)/g
},
parser: {
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
}
};
然后像这样使用它:
parseUri(document.referrer).host //<-- gets host name