【问题标题】:How to avoid Uncaught SecurityError: Blocked a frame with origin with phonegap如何避免 Uncaught SecurityError: Blocked a frame with origin with phonegap
【发布时间】:2016-04-15 00:34:46
【问题描述】:

我正在尝试构建一个 phonegap 应用程序,它充当客户网站的迷你浏览器。客户客户会打开这个应用程序,它会有一个收藏夹列表。他们可以单击这些收藏夹之一,它会在 minibrowser.html 页面中打开该收藏夹。 minibrowser.html 在顶部有一个收藏按钮,然后它有一个应该充当浏览器的 iframe。我通过更改 iframe src 打开收藏夹。我可以使用此代码捕获标题/网址

$iframe.on('load', () => {
  try { 
    console.log($iframe[0].contentDocument.title);
    currentUrl = $iframe[0].contentDocument.URL;
    console.log(currentUrl);
  } catch (e) {}
});

但是当 iframe 中的网页尝试使用此行访问 window.top 时,就会出现问题

window.top.scrollTo(0,1);

这会引发错误:

未捕获的安全错误:阻止来源为“https://webapp.company.com”的框架访问来源为“file://”的框架。请求访问的帧具有“https”协议,被访问的帧具有“文件”协议。协议必须匹配。

是否有欺骗 iframe 的 window.top 的方法?有没有在 webapp.company.com 上托管 phonegap 代码的情况下这样做。我无权访问 webapp.company.com

【问题讨论】:

    标签: javascript html cordova iframe


    【解决方案1】:

    由于 HTTPS 协议的性质,服务器必须指定它是否接受第三方帧分发(类似于您尝试执行的操作)。这样做是因为它在安全方面是一个重大缺陷。

    想象一下,一个人可能会使用此 hack 的一个简单变体来显示 Facebook 页面的一部分,并获取您的帐户详细信息。这项政策可以防止这种情况。

    一个简单的解决方法是使用某种 URL 缩短器或代理转发器。

    举个简单的例子:http://codepen.io/nakshatra334/pen/OMgLLP 并打开控制台;您会看到内容安全政策。

    标题X-Frame-Options 否认这一点,因为人们可能会将其用于非法目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-13
      • 2020-12-10
      • 2019-03-03
      • 2020-03-09
      • 2019-01-19
      • 2019-07-19
      • 2015-04-01
      • 1970-01-01
      相关资源
      最近更新 更多