javascript - 如何避免未捕获的安全错误: Blocked a frame with origin with phonegap

标签 javascript html cordova iframe

我正在尝试构建一个phonegap应用程序,它充当客户网站的迷你浏览器。客户客户会打开这个应用程序,它会有一个收藏夹列表。他们可以单击这些收藏夹之一,然后它会在 minibrowser.html 页面中打开该收藏夹。 minibrowser.html 顶部有一个收藏夹按钮,然后有一个充当浏览器的 iframe。我通过更改 iframes 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);

这会引发错误:

Uncaught SecurityError: Blocked a frame with origin "https://webapp.company.com" from accessing a frame with origin "file://". The frame requesting access has a protocol of "https", the frame being accessed has a protocol of "file". Protocols must match.

是否有办法欺骗 iframe 的 window.top ?无论如何,是否可以在不将phonegap 代码托管在webapp.company.com 上的情况下执行此操作。我无法访问 webapp.company.com

最佳答案

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

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

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

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

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

关于javascript - 如何避免未捕获的安全错误: Blocked a frame with origin with phonegap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34709035/

相关文章:

javascript - 如何防止在 Phonegap 应用程序中双重提示地理位置?

javascript - Angular/Javascript - 重新加载 ng-repeat 数据后更改类

javascript - 共享 Rails 和 JavaScript View

javascript - 使用 for 循环动态更改 Div 颜色

html - CSS 中的无图像背景图像

php - 动态提取用 php 和 ajax 更新的 html 表

html - 当引入第二个 flex 元素时, flex 元素不会占用容器中的可用空间

javascript - 计算链中除combineLatest之外的其他运算符以避免冗余计算

javascript - 如何检查内联 JavaScript 是否被禁用(使用 Tampermonkey)

iphone - Air、Titanium、Phonegap - iPhone 性能