Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >更新后重新注入内容脚本

更新后重新注入内容脚本
EN

Stack Overflow用户
提问于 2013-08-28 10:31:47
回答 2查看 3.9K关注 0票数 9

我有一个铬的扩展,它向每个打开的标签注入一个iframe。我的background.js中有一个background.js侦听器,它按如下方式手动注入所需的脚本(下面是API的详细信息:http://developer.chrome.com/extensions/runtime.html#event-onInstalled ):

background.js

代码语言:javascript
运行
AI代码解释
复制
  var injectIframeInAllTabs = function(){
    console.log("reinject content scripts into all tabs");
    var manifest = chrome.app.getDetails();
    chrome.windows.getAll({},function(windows){
      for( var win in windows ){
        chrome.tabs.getAllInWindow(win.id, function reloadTabs(tabs) {
          for (var i in tabs) {
            var scripts = manifest.content_scripts[0].js;
            console.log("content scripts ", scripts);
            var k = 0, s = scripts.length;
            for( ; k < s; k++ ) {
              chrome.tabs.executeScript(tabs[i].id, {
                file: scripts[k]
              });
            }

          }
        });
      }
    });
  };

当我第一次安装这个扩展的时候,它工作得很好。当我的扩展更新时,我也想做同样的事情。如果我也在update上运行相同的脚本,我就不会看到一个新的iframe注入。不仅如此,如果我在更新后尝试向内容脚本发送消息,则所有消息都不会传递到内容脚本。我也看到其他人在SO (Chrome: message content-script on runtime.onInstalled)上也遇到了同样的问题。在chrome扩展更新之后,删除旧内容脚本和注入新脚本的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 14:58:48

当扩展更新时,Chrome会自动切断与后台页面对话的所有“旧”内容脚本,如果旧内容脚本确实试图与运行时通信,它们也会抛出异常。这是我丢失的那块。我所做的就是,在chrome.runtime.onInstalled in bg.js中,我调用与问题中发布的方法相同的方法。这将注入另一个与正确运行时对话的iframe。在某个时候,旧的内容脚本试图与失败的运行时对话。我捕捉到了这个异常,并删除了旧的内容脚本。还请注意,每个iframe都被注入到自己的“孤立世界”(隔离世界在这里解释:http://www.youtube.com/watch?v=laLudeUmXHM),因此新注入的iframe无法清除旧的挥之不去的iframe。

希望这对将来的人有帮助!

票数 6
EN

Stack Overflow用户

发布于 2013-08-28 10:55:48

没有办法“删除”旧的内容脚本(除了使用window.location.reload重新加载有问题的页面外,这是不好的)

如果您想在内容脚本中执行哪些代码更灵活,请在executeScript函数中使用" code“参数,它允许您传递带有javascript代码的原始字符串。如果您的内容脚本只是一个大函数(即content_script_function),它位于background.js中

在background.js中

代码语言:javascript
运行
AI代码解释
复制
function content_script_function(relevant_background_script_info) {
   // this function will be serialized as a string using .toString()
   // and will be called in the context of the content script page
   // do your content script stuff here...
}

function execute_script_in_content_page(info) {
  chrome.tabs.executeScript(tabid,
    {code: "(" + content_script_function.toString() + ")(" +
     JSON.stringify(info) + ");"});
}

chrome.tabs.onUpdated.addListener(
  execute_script_in_content_page.bind( { reason: 'onUpdated',
                                         otherinfo: chrome.app.getDetails() });

chrome.runtime.onInstalled.addListener(
  execute_script_in_content_page.bind( { reason: 'onInstalled',
                                         otherinfo: chrome.app.getDetails() });
)

其中relevant_background_script_info包含有关背景页面的信息,即它是哪个版本,是否存在升级事件,以及函数被调用的原因。内容脚本页仍然维护其所有相关状态。这样,您就可以完全控制如何处理“升级”事件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18495615

复制
相关文章
在Keras中如何对超参数进行调优?
由于没有一个成熟的理论来解释神经网络,所以配置神经网络通常是困难的,经常被同学们调侃为“炼丹”。
花落花飞去
2018/02/05
16.9K2
在Keras中如何对超参数进行调优?
在 Linux/Mac 下为Python函数添加超时时间
我们在使用 requests 这类网络请求第三方库时,可以看到它有一个参数叫做timeout,就是指在网络请求发出开始计算,如果超过 timeout 还没有收到返回,就抛出超时异常。(当然存在特殊情况timeout 会失效,请看Timeouts and cancellation for humans*[1] 这篇文章中作者的举例,我们不考虑这种特殊情况)。
青南
2020/02/26
1.1K0
在 Linux/Mac 下为Python函数添加超时时间
手把手教你在本机安装spark
最近由于一直work from home节省了很多上下班路上的时间,加上今天的LeetCode的文章篇幅较小,所以抽出了点时间加更了一篇,和大家分享一下最近在学习的spark相关的内容。看在我这么拼的份上,求各位老爷赏个转发。。。
TechFlow-承志
2020/04/14
4.4K0
Jira Epic在完成状态时,如何让Epic在Scrum面板待办事项中不显示?
遇到的问题:Epic在完成状态时,仍旧在Scrum面板待办事项中显示,需要手动将其【标记完成】 而想要的效果是:Epic到完成状态时,Epic自动标记完成
donghui
2019/04/19
2.9K0
Jira Epic在完成状态时,如何让Epic在Scrum面板待办事项中不显示?
日本机器人“赢在技术输在商业” 谁之过?
据《金融时报》网站报道,去年当谷歌收购由2位日本机器人工程师创办的一家微型新创公司Schaft时,让人们对日本面临的威胁突然有了新的认识。包括苹果和亚马逊等新科技公司对机器人技术日益感兴趣。 时
机器人网
2018/04/13
7070
日本机器人“赢在技术输在商业” 谁之过?
在Centos下对Tornado的性能进行测试
    在之前的一篇文章中,我们在1g1核的惨淡硬件环境下,对 uwsgi + django 和 gunicorn+ django 的后端服务进行性能测试,得出结论单台django在简单读库操作下只能抗住大约200左右的并发:在Centos下使用Siege对Django服务进行压力测试
用户9127725
2022/08/08
7630
在Centos下对Tornado的性能进行测试
PECVD等离子增强化学沉积技术
纳米涂层(what)是一种功能性、柔性纳米级厚度的薄膜,具有疏水疏油特性。原理(how)在低温真空腔体内,等离子激发反应气体,在基材(被保护的PCBA)表面开启化学反应,生成纳米级厚度的网状保护膜(防泼溅、防潮、疏水、疏油,防腐蚀、防盐雾、防汗液)。气体沉积工艺保证了全面覆盖(内外,缝隙),均匀性,批量处理,牢固性。
用户10405156
2023/03/06
3210
如何通过VPC在本机搭建局域网
前几天在家里测试一个基于WS-AT的分布式应用,但是连接公司网络的VPN出现了问题,不得不采用VPC在本机搭建一个局域网。虽然以前也做过这样的尝试,可能是很久没有弄过了,一些细节记不清了,所以也折腾了好一阵子。在这里,我特意写一篇文章来介绍基于VPC搭建局域网的整个步骤,没有什么技术含量,只当给具有相同需要的朋友多一个参考。 我现在的Host Machine为Windows 7 Ultimate (X64) ,Virtual Machine为Windows Server 2008 (X86),都是现成的。本
蒋金楠
2018/01/16
2.4K0
如何通过VPC在本机搭建局域网
测试人员在技术面试时的注意事项
过完年了,有很多兄弟姐妹们开始春心萌动了,额不对,是物色新工作机会了,所以小编在此整理了一些面试相关的文章,希望对大家有所帮助!
张树臣
2019/03/04
6330
测试人员在技术面试时的注意事项
在使用Qt5.8完成程序动态语言切换时遇到的问题
因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文件,再通过网上介绍的方式,在 main函数中使用 installTranslator,即可让程序在启动时自动判断语言环境,加载相应语言。 至此,静态语言切换已经完成,下面要做的是动态切换(即不需要重启软件)。 1.首先,令语言能够切换的 GUI组件用的是 QComboBox,信号是 currentIndexChanged,在于这个
用户1653704
2018/06/07
1.7K0
对测试技术在团队的一个简单思考
测试技术带来的是PPT工具还是紧贴业务,服务于业务的小工具,小脚本,PPT工具大部分可能带来的是高大尚的平台,无效不实用,投入成本高,主要用于晋升和给自己镀金的作用;而小脚本,小工具不高大尚,作用大,感觉替代性高,一直在业务线上,没有发展前途,对以后前途和职业发展来讲是阻碍;也许可能是跪久了,站不起来了,迷路了,不知道 南橘北枳这个成语吗?所以测试技术要符合自己的团队和业务进行发展才是最实在的,太虚了,经济不景气,裁的就是这些;
厦门-安仔
2023/03/07
2320
对测试技术在团队的一个简单思考
在Centos下使用Siege对Django服务进行压力测试
    Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。今天我们就使用Siege来对Django进行一次压力测试,看看单台Django服务到底能抗住多少的并发数。
用户9127725
2022/08/08
1.6K0
在Centos下使用Siege对Django服务进行压力测试
微信小程序----wx.getLocation(OBJECT) API在iOS关闭本机定位时,获取定位失败
问题 在做一个小程序时,进入首页需要获取用户的当前位置经纬度,然后去服务器查询当前位置周边的网吧。在安卓关闭定位设置时,wx.getLocation(OBJECT) API依然能够获取当前位置的经纬度;但是iOS如果关闭定位设置,wx.getLocation(OBJECT) API就会失败! 解决办法 微信小程序社区解决办法 根据官网解决的实际用法 Page({ onShow(){ // 获取当前地址 wx.getLocation({
Rattenking
2021/02/01
1.4K0
CPU 摸鱼时,在干嘛?
假设你正在用计算机浏览网页,当网页加载完成后你开始阅读,此时你没有移动鼠标,没有敲击键盘,也没有网络通信,那么你的计算机此时在干嘛?
小林coding
2021/03/30
7820
CPU 摸鱼时,在干嘛?
在定义adt时_ScriptableObject
Mutators 变值器(改变对象属性的方法) 通常范围void,如果返回void,则必然意味着它改变了某些对象的内部状态,也可能范围非空类型(如容器类的put、add方法)
全栈程序员站长
2022/10/02
3060
curl在CDN排障中的常见用法
-I Show document info only 只展示headers,发起HEAD请求 -o Write output to file instead of stdout 保存到本地 -x 用这个option可以指定http访问所使用的proxy服务器及其端口 -v Make the operation more talkative 可以显示一次http通信的整个过程,包括端口连接和http -H Custom header to pass to server 添加header -A/–user-agent [string] 指定UA访问 -e, --referer URL 指定referer --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS -X -d 这里的X是大写,-X POST发起POST请求
邪恶の大灰
2019/04/29
3.6K0
点击加载更多

相似问题

goBack屏在排毒测试中的应用

60

排毒只测试飞溅屏

10

排毒测试还没有完成

10

在反应本机溅屏中显示ActivityIndicator 5秒

110

如何使用react本机-i18n在排毒[反应-本机]

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档