好的,我有一个页面,在这个页面上我有一个iframe.我需要做的是在iframe页面上,找出主页面的URL是什么.
我已经搜索过,我知道如果我的iframe页面位于不同的域上,这是不可能的,因为这是跨站点脚本.但是我读过的每个地方都说如果iframe页面和父页面在同一个域中,那么如果我这样做,它应该可以工作:
parent.document.location
Run Code Online (Sandbox Code Playgroud)
parent.window.document.location
Run Code Online (Sandbox Code Playgroud)
parent.window.location
Run Code Online (Sandbox Code Playgroud)
parent.document.location.href
Run Code Online (Sandbox Code Playgroud)
...或其他类似的组合,因为似乎有多种方法来获得相同的信息.
不管怎么说,这就是问题所在.我的iframe与主页面位于同一个域中,但它不在同一个SUB域中.所以我举个例子
http:// www.mysite.com/pageA.html
然后我的iframe网址是
http:// qa-www.mysite.com/pageB.html
当我尝试从pageB.html(iframe页面)获取URL时,我不断收到相同的访问被拒绝错误.所以看起来甚至子域都算作跨站点脚本,这是正确的,还是我做错了什么?
我正在尝试确定是否有任何iframe是跨域的.根据此问题中接受的答案:检测iframe何时是跨域的,然后将其删除,然后将代码访问contentDocumentiframe放入try / catch块中.我在Chrome中尝试使用跨域iframe:
try {
document.getElementsByTagName('iframe')[0].contentDocument;
} catch(err){
console.log("called");
}
Run Code Online (Sandbox Code Playgroud)
它仍然会抛出跨域错误,并且不会捕获错误.
我还试图检查父页面url的协议+主机+端口是否在srciframe中:
function thirdPartyIframe(iframe){
var url = document.location.protocol + "//" + document.location.hostname + (document.location.port === "" ? "" : ":" + document.location.port);
var regexp = new RegExp(url.replace(/\//g, "\\/").replace(/\./g, "\\."));
if (iframe.src === '' || regexp.test(iframe.src)){
return false;
} else {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不适用于Facebook主页上的第一个iframe,src等于(很长):
"http://www.facebook.com/ai.php?aed=AQLlH2cfdnsnLrDUVyqrQPlWpayw9N09Z_iNuhulevbeEfVa4mcVRcT8cjAZOjQb8y1QXab5Ae3aSEJx49U_Qv35rtSp1VC9cY0_CrpOjMDk40hS_Xm57A996YtRVCcWSuRZ_jZERQ_iA_E4621NAbKHT9dsB7uElkRtTvl5K-zPI0jeH-BEnlZIOXbeEdbRC6qCwoToaltolpe-Ot2KWgkfb_vBZYpzUc3jQoEHzLG6tauO9l_hkXpYpHxnt-KYFKIFZ1PgmrHgb0UcGjeKHl7yBR1AbW2n5XgdgaAhFvBjs5GZlKy566nvl8eLRA60orwkwtWYeN8-gKoAmOLm7-6minsWn8lk1h2Qn3p07HCTSnYHfv1aJ6mF5jmuzP0YYe7Ym9ZbmK-tvax4uPAQJ2OdULilKbEh8M-2V9pVY3AC228OPlrRullZuuOg8DI2A8WeMF-fbbOdOFFVCe5Gj1CaZu3LYXiqdG7mUgY6AEpk9ZzGT4fC2K8DInQo1AypCvzG64C_bEWfODeXe0aGbkWwsUUmO7E5HFg0tvZkK5IAR_xxxQ2rlf5jbcEDo_2gdIDdHe1HT75-SJLUsSA0M8EU01oNNPuWwEC2BW6inepc9QPuqeg42tcEbKLU-rIUnXDBLvgutft8azWPPQ6_LafGjCAmC9uTalagoWLLDMpQOThvPg7YeVd7qg_c9Mzn2GAfuswcxDSxyRIZo9MaOhA6mhfXeE1tmjyBBsMxnx08tO21Jsfgch59fmMxpeJzdsNMPK3FAojfglvCQ2Zrt_6ataexUB4xlM7_PhKrfBPtxb5fe2TE9-nlWruNEpoCrzI05yv4Go3CYEWHob06K_9iICfNVTFkSYGTiJnMXCy_fdgfyzUIn5QJIPRo4-Wnyg444zKAO_nyFW59LqbIanHVfFY6ybiA6KeC3meREWzTPSsrU5d_NbYHlJWb8uPNDR04jaH5e2qiYj3Y8qgLQA5m"
Run Code Online (Sandbox Code Playgroud)
我的功能将其归类为非第三方iframe,但Chrome访问时仍然会引发跨域错误contentDocument.
我正在寻找一种万无一失的跨浏览器方式来做到这一点.
我的问题是我正在创建一个将添加到iframe中不同页面的应用程序.但有时候它会出现在我自己的领域,有时还出现在某些领域.当它托管在我自己的域上时,我希望能够调用框架外的函数.
是否可以检查父窗口是否在同一个域(使用javascript/jQuery)?目前,当我没有在我自己的网站上托管时尝试访问我的框架之外的某些东西时,我得到了这个丑陋的错误:"错误:拒绝访问属性'权限'权限'"
想做这样的事情:
if(window.parent is accessible) {
// Do special stuff
} else {
// Do nothing
}
Run Code Online (Sandbox Code Playgroud) 是否可以在JavaScript中收集HTTP标头?在使用Firebug几天后,这只是我的想法.在我发现的其中一篇文章中,在JavaScript中找不到HTTP头是不可能的,而在firebug中,我们可以看到响应头(客户端)
所以我的问题是我们可以在JavaScript中缓存HTTP标头吗?
javascript ×4
cross-domain ×3
iframe ×3
firebug ×1
html ×1
http ×1
http-headers ×1
jquery ×1
security ×1