提问者:小点点

尝试重新加载嵌入式iframe时出现CORS错误[重复]


我正在尝试强制重新加载 iframe 的内容(强制重新加载意味着不应使用浏览器缓存)。从 soltuion 重新加载 iframe 使用 jQuery 在这里,我可以通过这个 javascript 代码做到这一点:

document.getElementById(FrameID).contentDocument.location.reload(true);

但我犯了同样的起源政策错误。但我确实在嵌入了iframe的页面和加载在iframe中的页面上都启用了CORS。从web开发工具中,我已经验证了在两个负载上,CORS标头都存在:

Access-Control-Allow-Origin: *

尽管双方都在不同的域下,但我控制着他们双方,如果需要,可以发送CORS标头或任何其他标头。

做这件事的正确方法是什么?


共2个答案

匿名用户

所述情况不需要 CORS。同一源策略不允许跨不同域访问 DOM 属性和方法。您可以使用 postMessage JavaScript API 来启用 IFRAME 和父页面之间的通信。

匿名用户

这个脚本使用images/jpg(相同的URL)很好:

document.getElementById('iframe_id').contentWindow.location.reload();

对于Firefox 107.0 (64位)和iframe,当尝试使用嵌入式firefox pdf viewer重新加载应用程序/pdf时,会显示以下控制台消息:

DOMException: Permission denied to access property "reload" on cross-origin object

使用Trick evko/joe可以同时工作pdf和jpg(等)

try {
 document.getElementById('iframe_id').contentWindow.location.reload();
}catch(e){
 document.getElementById('iframe_id').src = document.getElementById('iframe_id').src;
 console.warn(e);
}
<iframe id="iframe_id" src="dynamic_image_or_pdf.php"></iframe>

它奏效了