使用浏览器插件规避同源策略

circumvent the same origin policy using a browser plugin

本文关键字:策略 浏览器 插件      更新时间:2023-09-26

我最近读到"同源策略"不适用于浏览器插件。

我想创建一个项目,用户可以通过iframes使用Gmail、Facebook、Twitter等网络服务。

由于这些网站上的策略标题相同,简单地使用iframe是不可能的,但我正在努力弄清楚如果安装我的浏览器插件,是否有办法做到这一点。

如果有人能提出任何想法,我将不胜感激。

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

这包括"insertCSS"answers"executeScript"等方法。唯一需要的权限是"webview"

虽然你不能用iFrames(据我所知)做到这一点,但chrome扩展的文档将允许你从任何域获取html,并在域处于你的权限范围内时显示它。

即在"permissions" array中的manifest.json中,将条目添加为字符串("http://www.facebook.com")。

您应该能够从那里用程序呈现一个页面,其中包含您喜欢的任何内容。

如果使用在Node Webkit:中编写的桌面应用程序,您可以避免浏览器跨源限制,并且仍然可以编写HTML5 javascript

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

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

你的问题很宽泛,但让我们假设你在一个页面上有三个iframe,twitter、facebook和gmail,为了论证起见,你想要一条新的推文在gmail和facebook中弹出一个提醒框。

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

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

我认为这个片段似乎与你想做的事情最相关(取自上面的链接):

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

在我链接的部分下面有一个例子,我不会复制到这里,因为它很大。

事实上,读过这些之后,它是指运行扩展的页面,还是指包含在扩展本身中的页面,这一点非常模糊。

还有chrome"消息传递"功能(https://developer.chrome.com/extensions/messaging)其开头为:

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

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