这是本人第二次开发Chrome插件,本次开发主要两个目的,第一是练习Chrome插件开发时各个页面(沙盒)之间的消息传递,第二是在办公室看某些网站不想打开图片(你懂得。。。),但是几乎翻遍了webstore里都找不到满足要求的。
首先分析一下,在上一次开发Chrome插件开发之制作豆瓣电台歌词,我们主要使用pageAction和content_script,但是chrome的browser action插件最主要的background和popup都没有触及,而background、popup和content script三者之间的消息传递如下图所示:
而我们这次的消息传递有点击popup.html里隐藏或显示按钮时,将状态传递给content script,content script将页面所有图片隐藏并且把状态传给background.js,永久保存起来。
popup.js
$("input:radio[name='options']").change(function () {
chrome.tabs.query({active: true, currentWindow: true}, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, {name: "toggleImages", state: $("input:radio[name=options]:checked").val()},
function (response) {
console.log(response.state);
});
});
})
content script
chrome.runtime.onMessage.addListener(
function (request, sender,sendResponse) {
var name = request.name;
if (name == "toggleImages") {
var state = request.state;
chrome.runtime.sendMessage({name: "setState", state: state});
toggleImage(state);
sendResponse({state:state});
}
});
background.js
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
var name = request.name;
if (name == "setState") {
var state = request.state;
if (state == "hide" || state == "show") {
localStorage.state = state;
}
} else if (name == "getState") {
sendResponse({state: localStorage.state});
}
});
相信大家已经注意到了,background就是用来保存插件一些需要持久化的东西,例如用户的偏好设置,通常是使用localstorage,而popup是处理用户界面的接口,至于content script就是插件与web page打交道的控制器,这三个运行环境就像mvc模型,不得不说,Google设置的机制太好了。
剩下的消息传递还有,web page加载时根据当前用户的设置决定是否显示图片,这里我做的并不是很好,因为我一开始只是把img的display改成none,这确实能使图片隐藏,但是图片还是会加载到页面来,只是一瞬间又被隐藏起来,后来我索性把src也改了,但仍然不能解决该问题,我在这里向各位大神请教一下,能否拦截所有图片的加载来实现隐藏图片,还有对于通过JavaScript动态插入的img节点我也没办法隐藏,毕竟鄙人还是一个小白啊。。。以下是这次消息传递代码:
content script
chrome.runtime.sendMessage({name:"getState"},function(response){
toggleImage(response.state);
})
function toggleImage(state){
switch (state) {
case "hide":
$("img").each(function(){
var originSrc=$(this).attr("src");
$(this).bind('load', function () {
$(self).hide().attr("src", originSrc + "null");
self.loaded=true;
})
// }
})
$("img").css({"display": "none"});
break;
case "show":
$("img").css({"display": "block"});
$("img").each(function(){
var changeSrc=$(this).attr("src");
if(changeSrc.lastIndexOf("null")!=-1) {
var originSrc = changeSrc.substring(0,changeSrc.lastIndexOf("null"));
}
$(this).attr("src",originSrc);
})
break;
}
}
background.js
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
var name = request.name;
if (name == "setState") {
var state = request.state;
if (state == "hide" || state == "show") {
localStorage.state = state;
}
} else if (name == "getState") {
sendResponse({state: localStorage.state});
}
});
最后的一个消息传递是,弹出popup时根据用户当前显示开关,到底是隐藏还是显示图片
popup.js
chrome.extension.sendRequest({name: "initToggle"}, function (response) {
var state = response.state;
if (state == "hide" || state == "show") {
$("input:radio#" + state).parent('label').addClass('active');
}
console.log(response.state);
})
background.js
chrome.extension.onRequest.addListener(
function(requset,sender,sendResponse){
var name=requset.name;
if(name=="initToggle"){
sendResponse({state:localStorage.state});
}
}
)
以下是运行截图:
插件的源码与打包程序下载地址:http://download.csdn.net/detail/xanxus46/7193505希望对学习Chrome插件开发的朋友有帮助。
插件的安装教程查看上一篇博客:Chrome插件开发之制作豆瓣电台歌词
分享到:
相关推荐
chrome插件开发,完整demo,包含 这是一个popup页面! background 打开background 调用background页JS方法 获取background页的标题 设置background页标题 (验证background生命周期和单实例特性) 窗口操作演示 新窗口...
Google Chrome,中文名为“谷歌浏览器”,是一个由Google公司开发的网页浏览器。与苹果公司的safari相抗衡,浏览速度在众多浏览器中走在前列,属于高端浏览器。采用BSD许可证授权并开放源代码,开源计划名为Chromium...
Chrome浏览器隐藏了很多高级用户和开发人员都知道的以“chrome://”为前缀的设置和工具。通过隐藏的Chrome,您可以在方便,高效,漂亮的菜单系统中访问所有这些Chrome页面。可访问的Chrome页面包括: - 应用程序 ...
AliApplyHelperChrome插件:分析阿里巴巴校招个人中心页面“隐藏”应聘状态(仅供参考);每隔一分钟刷一次状态,应聘状态变更时发短信通知代码写得比较仓促,比较乱,暂先不漏源码了。如果之前有安装过本插件,可以...
Chrome扩展程序,使您可以更好地查看Notion数据库页面!...将整个存储库下载为Zip文件(请参阅此页面右上角的绿色按钮“代码”)打开Chrome扩展程序chrome:// extensions启用“开发人员模式”(顶部ri
语言:English (United States) ... 开发人员的隐藏设置(Chrome:// Inspect) - Dino Game - 隐藏在Chrome浏览器中的滚动游戏(Chrome:// Dino) - 下载 - 最近下载的项目(Chrome://下载) - 扩展 - 管理已安装的Ch
适用浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.其他浏览器访问。 使用方法: 1、下载客服插件先解压,把解压文件上传到网站默认风格的摸版里面,把客服插件中三个文件夹上传至网站...
GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得...
2.使用鼠标或触摸屏开始在任何网页上绘图 3.要更改颜色,请单击颜色选择框。4.要更改厚度,请使用转盘 5.使用橡皮擦工具擦除图形的某些部分 6.再次单击红色标记图标时,隐藏或显示工程图菜单 7.按清除按钮或“ X”...
MLBoxscore MLBoxscore是Chrome扩展程序,可显示带有MLB游戏每日框得分的工具栏。 每次重新加载页面时都会重新加载功能和选项得分。 要重新加载乐谱而不重新加载页面,请选择右上角的“更新”按钮。 要临时隐藏工具...
chrome插件会在页面包含PHP错误时显示一个弹出窗口,甚至很难发现隐藏在HTML标记中PHP错误,而这些HTML标记在不查看源代码的情况下是不可见的。 在此处的论坛中发布任何反馈或建议:...
Chrome的QRCodes是一个插件,可以提高您的工作效率。 您的朋友曾经问过您如何找到网页吗? 您是否曾打印过一篇文章,因为网址过长而无法回来? 借助QRCode,您可以轻松共享网页。 一键显示,一键隐藏,一键移动图像...
然后选择目录如果在扩展名中添加/修改文件,请返回此页面并重新加载该扩展名开发人员参考:执照Copyright (c) 2019-2021 islu.All images belong to the artist of the site (Dragon Cave) so they do not belong to...
隐私和权限:-数据与内置的“ Chrome Sync”引擎同步-需要权限“访问所有网站的数据”才能在任何页面上工作(内部浏览器页面,其他扩展页面和某些Mozilla域,包括此Chrome商店页面除外)。 支持独立开发人员:-我是...
语言:日本語 ... 而不是隐藏包含您不想看的单词的整个页面,而不是充分收集必要的信息,因为它涵盖了固定范围,包括该字。 它还支持Twitter中使用JavaScript添加和更改文本等。 开发人员没有收集的信息。
允许添加组的评审员在隐藏+其他特征的拉请求。...请访问此页面获取源代码和开发版本:https://github.com/dragouf/Stash-Reviewers-Chrome-分机 ension / tree / stash-server-version 支持语言:English
不仅如此,还要阅读有关网上银行,在线营销,网页设计,网页开发以及更多有用主题的教程。 尝试使用新一代的CyP应用程序,例如翻转文本,测验,Babynames Finder,笑话n SMS等。 安装扩展程序,并访问一切真棒! ...
还有一些自定义选项,它们是:-URL中的自定义图像背景-通过选择自定义颜色的纯色背景-删除时间和日期-隐藏搜索栏后面的背景此扩展程序仍是新的并且正在开发中,因此,如果您有任何功能要求或发现任何想要我更新的...
此Nozbe Chrome扩展程序是一个方便的按钮,可在您的Nozbe收件箱中创建任务,并将当前网页地址保存为该新任务的注释。 为什么这有用? 也许您想与属于共享项目的Nozbe团队共享网页? 也许您看到了一个非常酷的生日...
*“捐赠...”链接可以通过选项页面隐藏。 *“选项...”链接可以通过选项页面禁用(您仍然可以通过右键单击或在“扩展”页面上将其打开)。 *域忽略列表-如果两个选项卡都位于被忽略的域上,则不要将新选项卡放在最...