我正在尝试强制重新加载 iframe 的内容(强制重新加载意味着不应使用浏览器缓存)。从 soltuion 重新加载 iframe 使用 jQuery 在这里,我可以通过这个 javascript 代码做到这一点:
document.getElementById(FrameID).contentDocument.location.reload(true);
但我犯了同样的起源政策错误。但我确实在嵌入了iframe的页面和加载在iframe中的页面上都启用了CORS。从web开发工具中,我已经验证了在两个负载上,CORS标头都存在:
Access-Control-Allow-Origin: *
尽管双方都在不同的域下,但我控制着他们双方,如果需要,可以发送CORS标头或任何其他标头。
做这件事的正确方法是什么?
所述情况不需要 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>
它奏效了