Chrome扩展开发中的标签页id变化

整个过程是大概这样的:
background.js监控到页面上的点击事件,创建一个新标签页,并将新标签页的id值赋给一个全局变量taskTab:

 代码如下 复制代码
var taskTab;
chrome.tabs.create({url: /blog/}, function(tab) {
taskTab = tab.id;
});

同时,在background.js里监听webNavigation的onCommitted事件,用于动态注入内容脚本:

 代码如下 复制代码
chrome.webNavigation.onCommitted.addListener(function(details) {
if (details.tabId === taskTab) {
    chrome.tabs.executeScripts(taskTab, {file: 'example.js'});
}
});

在新标签页打开并注入内容脚本后,内容脚本会找出页面里的链接”http://www.zfanw.com/blog/about”,并模拟点击。
且假定新标签页页面HTML代码中还包含如下内容:
<link rel="prerender" href="/about">
prerender1是Chrome浏览器的一个加速访问的特性。它可以在我们访问A页面时,先在背景加载好B页面,这样我们访问B页面时,就非常神速。
摘取链接1中的一段描述:
A hidden page is created for the prerendered URL, which will do full loading of all dependent resources, as well as execution of Javascript. If the user navigates to the page, the hidden page will be swapped into the current tab and made visible.
B页面是在一个隐藏页中加载的,当我们点击B链接时,隐藏页就替入当前标签页并置为可见。
从字面上看,没有任何字眼暗示说tab id会变化。
但实际上,tab id确实变了,这可以在background.js里绑定一个onReplaced事件来检查。
onReplaced2事件描述如下:

 代码如下 复制代码
Fired when the contents of the tab is replaced by a different (usually previously pre-rendered) tab.
绑定的代码如下:
chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) {
  console.log "added tabid: " + addedTabId;
  console.log "removed tabid: " + removedTabId;
  });

打开背景页的开发者工具,我们就能看到,模拟的点击事件发生时,Chrome浏览器移除了一个标签页,并新增了一个。只是从我们肉眼来说,根本看不到置换过程。
我的情况里,因为tab id变化,所以taskTab的值其实已经没用,结果导致点击打开的about页面没能注入内容脚本。如果你也碰上内容脚本动态注入失败的情况,不妨检查下标签页的id值。

时间: 2024-10-10 15:17:18

Chrome扩展开发中的标签页id变化的相关文章

过滤分享的Chrome扩展开发详解

明确需求 扩展的功能在前文<眼不见为净--过滤人人网分享的chrome扩展>中已做了介绍:把人人网中一些带有"不分享就如何如何"等诅咒信息的标题给屏蔽掉,眼不见为净!描述得更详细些就是: 过滤功能只在人人网域名(http://*.renren.com/*)下启用: 只有访问人人网时,扩展的图标才显示: 好友的分享信息会出现在很多地方(如好友主页.新鲜事.分享主页等),这些都要过滤: 我只是不想看到那些讨厌的标题,但分享的视频.图片等还是想看的. 其中(4)是核心功能,(2)

chrome扩展开发其他地方调用sendmessage里的response

问题描述 chrome扩展开发其他地方调用sendmessage里的response var sysconfig={}; chrome.runtime.sendMessage({type : 'getload'}, function(response){ sysconfig=response.configs; console.log(sysconfig);//可以打印出来 }); console.log(system);///打印为空对象 background.js里是 case 'getloa

代码-在Android开发中,怎样查找资源id?

问题描述 在Android开发中,怎样查找资源id? 例如以下代码: String[] data={"test1","test2","test3"}; ArrayAdapter adapter=new ArrayAdapter (MainActivity.this,an droid.R.layout.simple_dropdown_item_1line,data); 其中,android.R.layout.simple_dropdown_item

如何在java图形界面设置中,标签页JLabel上设置触发操作

问题描述 在java图形界面设置中,标签页JLabelimage=newJLabel(newImageIcon("resimage/背景.jpg"));问怎么在这个'背景.jpg'图片的固定位置上设置鼠标触发操作?如下图上的A点触发操作http://wenwen.soso.com/z/q279760554.htm?cid=q.t2.m 解决方案 解决方案二:你可以把图片放入一个JButton里它可以实现一个监听事件MouseListener接口可以重写它里面关于鼠标按下的方法Mouse

Chrome实用扩展:微度新标签页

为大家推荐一个Chrome浏览器使用扩展--微度新标签页,这款扩展的功能就是能让Chrome浏览器的新建标签页变成一个超强大的导航站,而且用户还可以DIY新建标签页的内容.风格. Chrome插件--微度新标签页 电脑常识 将微度扩展安装到Chrome浏览器之后,就可以发现新建的标签页再也不是Chrome浏览器默认的标签页风格,而是变成了微度导航. Chrome新建标签页变成了微度导航 包括谷歌.百度搜索;优酷土豆视频;淘宝.京东购物等等常用网站都和谐地"生活"在一起,你想点哪个就点那

Chrome实用扩展推荐 微度新标签页导航站

Chrome插件--微度新标签页 点击这里,将微度扩展安装到Chrome浏览器之后,就可以发现新建的标签页再也不是Chrome浏览器默认的标签页风格,而是变成了微度导航. Chrome新建标签页变成了微度导航 包括谷歌.百度搜索:优酷土豆视频:淘宝.京东购物等等常用网站都和谐地"生活"在一起,你想点哪个就点那个!而且用户还可以编辑这些网站导航,将自己常用的网站加入到其中,方便上网冲浪. 手工编辑常用网站 微度新建标签页的下方可以摆放用户常用的Chrome浏览器扩展,比如游戏.扩展工具等

用PHP实现网页开发中的翻页跳转

我们都知道用 php+mysql 在 web 页实现数据库资料全部显示是非常简单而有趣的,数据库资料很少的情况下页面显示还是让人满意的,但是当数据库资料非常多的情况下,页面的显示情况将会变的非常糟,下面就来介绍一下如何实现当前页面数据资料显示数量及如何实现动态的翻转功能. 这里将介绍两种翻页显示功能的实现: 先介绍一下在翻页中用到的数据库语法: mysql_query("select * from table order by id desc"); 这条数据库语句再熟悉不过了,是用来搜

PHP实例:用PHP实现网页开发中的翻页跳转

我们都知道用 php+mysql 在 web 页实现数据库资料全部显示是非常简单而有趣的,数据库资料很少的情况下页面显示还是让人满意的,但是当数据库资料非常多的情况下,页面的显示情况将会变的 非常糟糕,下面就来介绍一下如何实现当前页面数据资料显示数量及如何实现动态的翻转功能. 这里将介绍两种翻页显示功能的实现: 先介绍一下在翻页中用到的数据库语法: mysql_query("select * from table order by id desc"); 这条数据库语句再熟悉不过了,是用

在php扩展开发中如何使用pkg-config

首先科普下pkg-config能干啥.下面是维基百科对pkg-config的说明: pkg-config 是一个提供从源代码中编译软件时查询已安装的库时使用的统一接口的计算机软件.pkg-config原本是设计用于Linux的,但现在在各个版本的BSD.windows.Mac OS X和Solaris上都有着可用的版本. 简单的说,pkg-config主要提供如下几个功能: 1.检查库的版本号.如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件. 2.获得编译预处理参数