chrome插件的popup与跨域请求

tkorays <[email protected]>

popup及其他js脚本

在chrome插件开发中,大致有几种类型的js文件:popup窗口的js文件,background脚本,content脚本。

  • popup即指弹出窗口,里面的页面是使用html等定义的。这个页面里面包含脚本,主要用于popup界面逻辑,但是它也可以调用chrome的一些API,比如和background通信。
  • background是用于处理后台功能的,比如处理一些计算、分析页面等。
  • content是嵌入打开的页面的,利用它可以修改浏览页面的样式功能、得到页面的DOM等。

他们三个之间是可以相互通信的,chrome提供了一些通信的方法:

chrome.extension.*

chrome.runtime.*

跨域请求

由于安全问题,chrome禁止了跨域请求的。在某些场景中,我们需要在popup的脚本中发送跨域请求,但是在chrome中执行,返回的status总是为0 。这样很不方便。

但是在插件中,background脚本是可以执行跨域请求的。

content脚本中也可以请求,但是必须先设置manifest.json里的permissions,开启对某些地址的跨域请求。

这里有一些解决方案。

1.利用通信

popup发送消息,background执行跨域请求,返回信息。但是,这里有个问题,popup里面的发送消息时回调函数并没有执行(content和background通信中执行没问题)。但是我们需要在收到消息后执行某些操作。因此,这样问题很大。

2.调用background函数

其实,还有种最简单的方法,那就是直接调用background的函数。因为,popup里面可以获取background:

var bgPage = chrome.extension.getBackgroundPage();

只要调用函数bgPage.someFunc();就可以使用background的功能了。

比如你在background里面实现函数:

DownloadPage(url,callback){
     var content = "";
     // 下载代码,可以跨域请求
     // .......
     callback(content);
};

在popup里面调用:

bgPage.DownloadPage('http://www.baidu.com',function(content){
      // 在这个回调函数里面改变popup内容等
});

时间: 2024-08-29 10:24:37

chrome插件的popup与跨域请求的相关文章

将微博或者qq空间的说说同步至博客园 wcf+js(ajax)跨域请求(1)

前天刚写了篇文章使用Bootstrap为你的博客园自定义轮播图片(今天将图片加载的顺序调整了下,不在访问的时候直接加载,而是页面加载最后在脚本里面动态添加dom元素),虽说技术含量不怎么高,但是大家还算感兴趣.其实对博主来说最关键是博客的积分在涨.所以趁热打铁,再来一篇使用wcf+js ajax跨域请求数据同步空间说说的帖子. 因为是请求qq说说的数据,所以要登陆我的qq,这个很麻烦,总不能让每个访客都登陆的qq,然后把数据取出来吧,而且qq也没有相关的接口提供,登陆的时候还要处理验证码.所以这

AJAX请求和跨域请求详解(原生JS、Jquery)

一.概述 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX = 异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面. 本博客实验环境: python:2.7.11 web框架:tonado jquery:2.1.1 二.“伪”AJAX 由于

项目中经常遇到的跨域请求的几种方法

什么是跨域 JSONP proxy代理 cors xdr 关于跨域无非就是jsonp和iframe,随着跨域请求的应用越来越多,W3C提供了跨域请求的标准方案(Cross-Origin Resource Sharing).IE8.Firefox 3.5 及其以后的版本.Chrome浏览器.Safari 4 等已经实现了 Cross-Origin Resource Sharing 规范,实现了跨域请求.在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息. 如

前端跨域方案-跨域请求代理(asp.net handler)

现在技术开发偏向于使用统一的接口处理浏览器或者app的http请求. 大家都知道因为浏览器的同源策略的原因 js直接请求webapi 接口会有一些问题,即使做好服务器端的配置 同样会有不少的 问题  并且会有浏览器的兼容性 而使用jsonp 又需要服务器端对返回数据做相关处理 所以考虑考虑使用代理来解决前端跨域请求的问题. 代理程序走asp.net的一般处理程序,来实现前端js请求的接受然后转发到api站点. 关键点: 1.使用url参数的方式传送api接口的站点路径 http://test.m

关于跨域请求的一些解决方案

方案: 1.jsonp 仅支持Get方法进行调用,利用Html中的Script标签可以进行跨域进行实现,可以直接设置JQuery中ajax的 dataType:'JSONP'来实现JSONP跨域请求数据 2.html5特性(Access-Control-Allow-Origin) 利用Html5中支持的Access-Control-Allow-Origin响应头进行跨域操作,如果服务器返回的响应中包含了Access-Control-Allow-Origin相应的设置,如Access-Contro

跨域请求之jQuery的ajax jsonp的使用解惑

转自:http://www.cnblogs.com/know/archive/2011/10/09/2204005.html 前天在项目中写的一个ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法,直接执行了error方法提示错误——ajax jsonp之前并没有用过,对其的理解为跟普通的ajax请求差不多,没有深入了解:出现了这种错误,几经调试(检查后台的代码和js部分的属性设置)还是不行,让我感觉很是意外和不解.于是,决定仔细研究下ajax jsonp

一个跨域请求的XSS漏洞再续

上回提到,由于需要使用代理页面解决POST请求的跨域请求,需要在代理页面上执行传递的函数.所以我们做了白名单只有我们认可的回调函数才能在页面上执行,防止执行非法的JS方法,做脚本攻击. 我们所采用的方式是,把白名单以及过滤方法单独提出作为单独的文件引入页面,然后进行使用(这就为新的漏洞提供了机会). 本次漏洞出现的原因有两个: 屏蔽了白名单的JS文件 当前页面如果检测不到这个方法就直接不过滤了(为什么这么处理呢?防止白名单失败之后,由于某些原因,导致某种请求失败,导致流程不通.真是因为这个原因,

HTML5:使用postMessage实现Ajax跨域请求

HTML5:使用postMessage实现Ajax跨域请求 由于同源策略的限制,Javascript存在跨域通信的问题,典型的跨域问题有iframe与父级的通信等. 常规的几种解决方法: (1) document.domain+iframe: (2) 动态创建script: (3) iframe+location.hash: (4) flash. 这里不细说这几种方法,记录的是HTML5的window.postMessage.postMessage兼容IE8+.Firefox.Opera.Saf

AJAX(XMLHttpRequest)进行跨域请求方法详解(三)

注意:以下代码请在Firefox 3.5.Chrome 3.0.Safari 4之后的版本中进行测试.IE8的实现方法与其他浏览不同. 3,带验证信息的请求 身份验证是Web开发中经常遇到的问题,在跨域请求中,默认情况下是不发送验证信息的.要想发送验证信息,需要进行withCredentials 属性,下面就是一个简单请求的例子: [xhtml] view plaincopyprint? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi