javascript - 在 iframe 中更改 iframe 的 src

标签 javascript jquery html iframe

当我尝试在 iframe 中更改 iframe 的 src 时,我在 Chrome 中遇到了这个问题(在本地运行文件),我收到了这个错误消息

Error = Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.

这是我用来检索 iframe 的代码

iframe = $("iframe").contents().find('iframe');
iframe.attr("src", url);`

当我将文件上传到服务器时,我没有遇到这个问题。但是,如果我在本地打开它们,则会出现错误。

它在 firefox 和 safari 中运行良好。

我如何在 chrome 和其他浏览器中执行此操作?

最佳答案

所有浏览器内置的安全功能可确保 Javascript 无法与其他窗口和/或框架中的对象交互(如果这些窗口或框架是从其他站点加载的)。这通常被称为“同源策略”。是否从其他站点加载了某些内容由 URL 的主机名部分决定。例如,如果外部框架是从 http://yoursite.com 加载的,内部框架是从 http://example.com 加载的,那么 Javascript 将在范围内运行外部框架将无法访问或修改内部框架范围内的任何属性或对象。

在这种情况下,特定错误表明您在外部框架上下文中运行的 Javascript 被拒绝访问范围为内部框架的对象 (contentDocument)。隐藏在您尝试使用的 jQuery 某处的是对框架的 document 元素的隐式访问(由该 iframe 的 contentDocument 属性访问)。

您可以通过破坏 iframe 并使用所需的 src 重新创建一个新的 iframe 来解决这个问题。

关于javascript - 在 iframe 中更改 iframe 的 src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625764/

相关文章:

javascript - 如何使用javascript将对象放入另一个对象中

javascript - 带有加号的加号/减号计数器(jquery)

javascript - 如何使用 Javascript 向文本框添加值

javascript - 两个相邻的元素,窗口高度为 100%

html - CSS如何使用bootstrap 3 col-md-4设置相同的div高度

javascript - 每 1 分钟显示和隐藏 div

javascript - 我应该担心 HTML5Shiv.min.js 版本 3.7.2 上的这些 JSLint 警告吗?

javascript - 如何设置变量以便 D3 数据更新找到正确的对象属性?

javascript - 如何使用递归方法从数组中删除隐藏元素

javascript - 使用 Ajax 加载数据后 jQuery 不会更改所选选项