chrome插件的popup与跨域请求
tkorays <tkorays@hotmail.com>

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内容等
});

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

  1. flask插件系列之flask_cors跨域请求

    前后端分离在开发调试阶段本地的flask测试服务器需要允许跨域访问,简单解决办法有二: 使用flask_cors包 安装 pip install flask_cors 初始化的时候加载配置,这样就可以 ...

  2. [1.6W字] 浏览器跨域请求限制的详细原理分析&寻找一种最简单的方式实现XHR跨域(9种方法, 附大招可以纯前端实现跨域!)

    Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...

  3. [1.6W字]浏览器跨域请求的原理, 以及解决方法(可以纯前端实现) #flight.Archives011

    Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...

  4. Ajax 跨域请求,Chrome 无法显示 Set-Cookie

    在使用 Ajax 进行跨域请求时,前后端均已设置 withCredentials = true,但 Chrome 前端响应无法显示 Set-Cookie. 一开始以为 Cookie 并没有设置成功,但 ...

  5. Chrome本地跨域请求设置,实现HTML模板页

    按照需求,公司现在需要通过第三方的API反馈的数据,进行在本地就可以打开的静态页面程序(完全脱离IIS等服务器).为了更好的维护项目,需要实现静态HTML引入HTML模板,完成ASP.NET模板页的类 ...

  6. ajax跨域请求的解决方案

    一直打算改造一下自己传统做网站的形式. 我是.Net程序员,含辛茹苦数年也没混出个什么名堂. 最近微信比较火, 由于现在大环境的影响和以前工作的总结和经验,我打算自己写一个数据,UI松耦合的比较新潮的 ...

  7. 关于 Angular 跨域请求携带 Cookie 的问题

    在前端开发调试接口的时候都会遇到跨域请求的问题.传统的方式是使用 Nginx 反向代理解决跨域.比如所有接口都在 a.com 的域下,通过 Nginx 将所有请求代理到 a.com 的域下即可. 使用 ...

  8. 利用CORS实现跨域请求(转载)

    跨域请求一直是网页编程中的一个难题,在过去,绝大多数人都倾向于使用JSONP来解决这一问题.不过现在,我们可以考虑一下W3C中一项新的特性--CORS(Cross-Origin Resource Sh ...

  9. Ajax_05之跨域请求

    1.跨域请求: Cross Domain Request:跨域名的HTTP请求,浏览器从某个域名下的资源访问了另一域名下的另一资源(协议.域名或是端口号不同): ①浏览器允许跨域请求的情形:  < ...

随机推荐

  1. chrome --headless --disable-gpu --dump-dom http://www.python.org

    Driving Headless Chrome with Python:Python chrome --headless --disable-gpu --dump-dom http://www.pyt ...

  2. 3. python 字符串的一般使用

    3. python 字符串的一般使用 1.基本操作 1)使用+连接 >>> "abc"+"efg"    'abcefg'    >&g ...

  3. 【docker】docker启动、重启、关闭命令,附带:docker启动容器报错:docker: Error response from daemon: driver failed programming external connectivity on endpoint es2-node

    在关闭并放置centos 的防火墙重启之后[操作:https://www.cnblogs.com/sxdcgaq8080/p/10032829.html] 启动docker容器就发现开始报错: [ro ...

  4. unity 质量设置 Quality Settings

    Unity allows you to set the level of graphical quality it will attempt to render. Generally speaking ...

  5. C#中的托管与非托管

    在.net 编程环境中,系统的资源分为托管资源和非托管资源. 字面理解托管,就是托付个别人管理,要的是结果,具体怎么完成的我并不关心,就像某些'牛逼'的老板“我只要结果”那样. 在.NET FRAME ...

  6. easyui datagrid 计算

    转载,至高吴上(Alfa.wu) !谢谢! /******************************************************** 主要用于 明细表格 字段间的计算 Sta ...

  7. strcmp实现

    #include<stdio.h> #include<assert.h> int my_strcmp(const char*a,const char*b) { while(*a ...

  8. 缓存算法:LRU、LFU、FIFO

      LRU全称是Least Recently Used,即最近最久未使用的意思.如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小.也就是说,当限定的空间已存满数据时,应当把最久 ...

  9. iOS:删除、插入、移动单元格

    删除.插入.移动单元格的具体实例如下:   代码如下: #import "ViewController.h" #define NUM 20 typedef enum { delet ...

  10. Objective-C:用命令行参数的格式对文件进行IO操作

    // main.m // 03-copyFile // Created by ma c on 15/8/24. // Copyright (c) 2015年. All rights reserved. ...