使用浏览器插件绕过相同的原始策略

时间:2014-04-15 08:59:46

标签: javascript iframe google-chrome-extension same-origin-policy browser-plugin

我最近读到了相同的原产地政策"不适用于浏览器插件。

我想创建一个项目,用户可以通过iframe将Web服务用作Gmail,Facebook,Twitter等。

由于这些网站上的原始政策标题相同,因此只使用iframe是不可能的,但是如果我的浏览器插件安装完毕,我会尝试找出是否有办法。< / p>

如果有人可以提出任何想法,我会感激不尽。

4 个答案:

答案 0 :(得分:2)

虽然您无法使用iFrame执行此操作(据我所知),the documentation的Chrome扩展程序允许您从任何域获取html,只要该域位于您的权限中就会显示。< / p>

即。在manifest.json的{​​{1}}中,将条目添加为字符串("permissions" array)。

您应该能够以编程方式从那里以任何您喜欢的方式呈现页面。

答案 1 :(得分:1)

您可以避免浏览器跨域限制,如果您使用Node-Webkit中的桌面应用,仍然可以编写HTML5 javascript:

基本上,您使用node.js命令行创建单个网页应用程序并在桌面上运行它。然后它可以从您喜欢的任何URL读取和操作数据。

以下是如何开始的教程: http://code.tutsplus.com/tutorials/introduction-to-html5-desktop-apps-with-node-webkit--net-36296

答案 2 :(得分:1)

你的问题相当广泛,但我们假设你在一个页面上有3个iframe,twitter facebook和gmail,为了论证,你想要一个新的推文来弹出gmail和facebook中的警告框。

我认为你有两个(可能是三个)选项。您可以使用window.postMessage将消息发布到父窗口,然后让扩展处理父窗口中的消息内容(例如parent.postMessage(message, "*");。请记住,可以发布对象)。

或者,如果我是正确的话,您的其他解决方案是使用chrome扩展程序的后台页面功能。 (https://developer.chrome.com/extensions/background_pages#details)。

我认为这段代码与您想要做的事情最相关(摘自上面的链接):

  

您可以使用直接脚本调用在各个页面之间进行通信,类似于帧的通信方式。 extension.getViews方法返回属于您的扩展的每个活动页面的窗口对象列表,extension.getBackgroundPage方法返回后台页面。

在我链接的部分下面的页面上有一个示例,我不会将其复制到此处,因为它非常大。

实际上,经过深入研究,它是否意味着它是指扩展程序正在运行的页面,还是包含在扩展程序中的页面。

还有Chrome“消息传递”功能(https://developer.chrome.com/extensions/messaging),它以:

开头
  

由于内容脚本在网页的上下文中而不是在扩展名中运行,因此他们通常需要某种方式与扩展的其余部分进行通信

请记住,如果您希望扩展程序在父窗口以外的任何框架中运行,则需要在manifest.json中指定"all_frames": true

答案 3 :(得分:1)

webview(https://developer.chrome.com/apps/tags/webview)应该能够实现您想做的一切。

这包括“insertCSS”和“executeScript”等方法。只有必要的权限是“webview”