此答案指定了解如何访问gmail.com https://stackoverflow.com/a/9439525/222236
上所有iframe的内容但是在mail.google.com上会抛出此错误:
Unsafe JavaScript attempt to access frame with URL https://plus.google.com/u/0/_/... from frame with URL https://mail.google.com/mail/u/0/#inbox. Domains, protocols and ports must match.
我尝试将*://plus.google.com/*
添加到扩展程序清单的匹配项中,但它没有帮助。
更新:在访问内容之前检查网址是否有效,但我的逻辑目前非常粗糙,因为它只检查google plus:
if(-1==iframes[i].src.indexOf('plus.google.com')) {
contentDocument = iframes[i].contentDocument;
if (contentDocument && !contentDocument.rweventsadded73212312) {
// add poller to the new iframe
checkForNewIframe(iframes[i].contentDocument);
}
}
答案 0 :(得分:2)
由于same origin policy,访问被阻止 避免错误的正确方法是从不同的来源中排除帧。你的逻辑非常粗糙。它没有专门查看主机名,也没有考虑其他域 颠倒逻辑以获得强大的解决方案:
if (iframes[i].src.indexOf(location.protocol + '//' + location.host) == 0 ||
iframes[i].src.indexOf('about:blank') == 0 || iframes[i].src == '') {
此白名单的说明:
protocol://host/
= https://mail.google.com
。about:blank
和一个空字符串答案 1 :(得分:1)
mail.google.com
和plus.google.com
不是同一个域。现代Web浏览器中的JavaScript实现不允许跨域脚本编写。
不使用不同类型的hackery,解决这个问题的正确方法是通过CORS(http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),在这种情况下你无法使用它。