`
modabobo
  • 浏览: 509571 次
文章分类
社区版块
存档分类
最新评论

Chrome插件开发之隐藏页面图片

 
阅读更多

这是本人第二次开发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

    chrome插件开发,完整demo,包含 这是一个popup页面! background 打开background 调用background页JS方法 获取background页的标题 设置background页标题 (验证background生命周期和单实例特性) 窗口操作演示 新窗口...

    Google Chrome 6.0.451.0 Dev 版(一个由Google公司开发的网页浏览器)

    Google Chrome,中文名为“谷歌浏览器”,是一个由Google公司开发的网页浏览器。与苹果公司的safari相抗衡,浏览速度在众多浏览器中走在前列,属于高端浏览器。采用BSD许可证授权并开放源代码,开源计划名为Chromium...

    隐藏的Chrome:秘密设置和工具「HiddenChrome: Secret Settings & Tools」「HiddenTools for Google Chrome:trade_mark:」-crx插件

    Chrome浏览器隐藏了很多高级用户和开发人员都知道的以“chrome://”为前缀的设置和工具。通过隐藏的Chrome,您可以在方便,高效,漂亮的菜单系统中访问所有这些Chrome页面。可访问的Chrome页面包括:  - 应用程序 ...

    AliApplyHelper:Chrome插件:分析阿里校招“隐藏”应聘状态;自动刷应聘状态,变更时发短信通知

    AliApplyHelperChrome插件:分析阿里巴巴校招个人中心页面“隐藏”应聘状态(仅供参考);每隔一分钟刷一次状态,应聘状态变更时发短信通知代码写得比较仓促,比较乱,暂先不漏源码了。如果之前有安装过本插件,可以...

    Chrome扩展程序可改善概念页面的布局-JavaScript开发

    Chrome扩展程序,使您可以更好地查看Notion数据库页面!...将整个存储库下载为Zip文件(请参阅此页面右上角的绿色按钮“代码”)打开Chrome扩展程序chrome:// extensions启用“开发人员模式”(顶部ri

    HiddenTools for Google Chrome:trade_mark:-crx插件

    语言:English (United States) ... 开发人员的隐藏设置(Chrome:// Inspect) - Dino Game - 隐藏在Chrome浏览器中的滚动游戏(Chrome:// Dino) - 下载 - 最近下载的项目(Chrome://下载) - 扩展 - 管理已安装的Ch

    左侧红色js悬浮QQ在线客服插件代码

    适用浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.其他浏览器访问。 使用方法: 1、下载客服插件先解压,把解压文件上传到网站默认风格的摸版里面,把客服插件中三个文件夹上传至网站...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得...

    页面标记「Page Marker」-crx插件

    2.使用鼠标或触摸屏开始在任何网页上绘图 3.要更改颜色,请单击颜色选择框。4.要更改厚度,请使用转盘 5.使用橡皮擦工具擦除图形的某些部分 6.再次单击红色标记图标时,隐藏或显示工程图菜单 7.按清除按钮或“ X”...

    MLBoxcard-crx插件

    MLBoxscore MLBoxscore是Chrome扩展程序,可显示带有MLB游戏每日框得分的工具栏。 每次重新加载页面时都会重新加载功能和选项得分。 要重新加载乐谱而不重新加载页面,请选择右上角的“更新”按钮。 要临时隐藏工具...

    PHP错误警报「PHP Error Alert」-crx插件

    chrome插件会在页面包含PHP错误时显示一个弹出窗口,甚至很难发现隐藏在HTML标记中PHP错误,而这些HTML标记在不查看源代码的情况下是不可见的。 在此处的论坛中发布任何反馈或建议:...

    QRCodes-crx插件

    Chrome的QRCodes是一个插件,可以提高您的工作效率。 您的朋友曾经问过您如何找到网页吗? 您是否曾打印过一篇文章,因为网址过长而无法回来? 借助QRCode,您可以轻松共享网页。 一键显示,一键隐藏,一键移动图像...

    Which-Egg-Is-Which:适用于Dragon Cave的镀Chrome扩展

    然后选择目录如果在扩展名中添加/修改文件,请返回此页面并重新加载该扩展名开发人员参考:执照Copyright (c) 2019-2021 islu.All images belong to the artist of the site (Dragon Cave) so they do not belong to...

    Auto Highlight-crx插件

    隐私和权限:-数据与内置的“ Chrome Sync”引擎同步-需要权限“访问所有网站的数据”才能在任何页面上工作(内部浏览器页面,其他扩展页面和某些Mozilla域,包括此Chrome商店页面除外)。 支持独立开发人员:-我是...

    TextForma-crx插件

    语言:日本語 ... 而不是隐藏包含您不想看的单词的整个页面,而不是充分收集必要的信息,因为它涵盖了固定范围,包括该字。 它还支持Twitter中使用JavaScript添加和更改文本等。 开发人员没有收集的信息。

    隐藏扩展名「Stash Extension」-crx插件

    允许添加组的评审员在隐藏+其他特征的拉请求。...请访问此页面获取源代码和开发版本:https://github.com/dragouf/Stash-Reviewers-Chrome-分机 ension / tree / stash-server-version 支持语言:English

    Cyber​​Passion「CyberPassion」-crx插件

    不仅如此,还要阅读有关网上银行,在线营销,网页设计,网页开发以及更多有用主题的教程。 尝试使用新一代的CyP应用程序,例如翻转文本,测验,Babynames Finder,笑话n SMS等。 安装扩展程序,并访问一切真棒! ...

    Clean Tab-crx插件

    还有一些自定义选项,它们是:-URL中的自定义图像背景-通过选择自定义颜色的纯色背景-删除时间和日期-隐藏搜索栏后面的背景此扩展程序仍是新的并且正在开发中,因此,如果您有任何功能要求或发现任何想要我更新的...

    Nozbe bookmarklet extension-crx插件

    此Nozbe Chrome扩展程序是一个方便的按钮,可在您的Nozbe收件箱中创建任务,并将当前网页地址保存为该新任务的注释。 为什么这有用? 也许您想与属于共享项目的Nozbe团队共享网页? 也许您看到了一个非常酷的生日...

    Tabs to the Front-crx插件

    *“捐赠...”链接可以通过选项页面隐藏。 *“选项...”链接可以通过选项页面禁用(您仍然可以通过右键单击或在“扩展”页面上将其打开)。 *域忽略列表-如果两个选项卡都位于被忽略的域上,则不要将新选项卡放在最...

Global site tag (gtag.js) - Google Analytics