微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未捕获到的DOMException:在页面中列出iframe时,阻止了具有“ http:// localhost:8080”源的框架访问跨域框架

如何解决未捕获到的DOMException:在页面中列出iframe时,阻止了具有“ http:// localhost:8080”源的框架访问跨域框架

错误消息…

Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.

…意味着 实例 访问跨域框架。

同源政策

:同源策略限制从一个来源加载的文档或脚本如何与另一个来源的资源进行交互。它是隔离潜在恶意文档的 关键安全机制

跨域资源共享(CORS)

:跨域资源共享(CORS)是一种机制,该机制使用其他 HTTP标头来 告诉 浏览器客户端 让在一个来源(域)运行的 AUT(被测应用程序 )具有访问权限从不同来源的服务器中选择资源。一个Web应用程序进行 跨域HTTP请求 时,它要求具有不同的原点(资源domainprotocolport)比它自己的起源。

起源的例子

这是URL的来源比较示例

URL                                                  Outcome    Reason
http://store.company.com/dir2/other.html             Success
http://store.company.com/dir/inner/another.html      Success
https://store.company.com/secure.html                Failure    Different protocol
http://store.company.com:81/dir/etc.html             Failure    Different port
http://news.company.com/dir/other.html               Failure    Different host

什么地方出了错

当您尝试遍历frames脚本/程序时,尝试<iframe>使用JavaScript 访问具有不同来源的脚本/程序,如果能够实现,将是一个巨大的安全漏洞 。如上所述, 同源策略 浏览器会阻止试图访问<iframe>源不同的脚本。

如果两个网页的 , (如果指定了一个)和 相同,则两个页面的来源相同。您有时会看到它称为 “时间”(其中“元组”是三个组成一个整体的组件的集合)。或许 , , 和 ,当你想访问所需的框架必须是同你同一个域。

所述 AUT 可能包含众多 / 内部框架 和其中一些可能只有在某些加载 的JavaScript / Ajax的 已完成,其中作为它们中的一些可以具有 样式 属性集为 或 可视性 为 。当然,不需要与所有人互动。因此,这将是识别和相应切换 属性 的更好方法<iframe>。您可以<iframe>通过以下方式切换到:

  • Frame Name
  • Frame ID
  • Frame Index
  • WebElement

按照 最佳做法, 当你的意图切换到框架诱导 按照下面的引用。

解决方法

我试图列出iframe页面中所有s 的名称,以便可以通过Selenium访问它们。

问题在于iframe每次更改的名称,因此我需要遍历所有这些更改。

我正进入(状态:

未捕获的DOMException:阻止了源为“ http:// localhost:8080
”的框架访问跨域框架。

当我尝试使用以下方法遍历它们时出错:

for (var f = 0; f < window.frames.length; f++) {
    console.log(window.frames[f].name)
}

有没有办法以其他方式获得名称iframe

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。