干货Chrome插件(扩展)开发全攻略2.6w字,看这篇就够了!

Posted 搬运工来架构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货Chrome插件(扩展)开发全攻略2.6w字,看这篇就够了!相关的知识,希望对你有一定的参考价值。

一、写在前面

我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的。本文所有涉及到的大部分代码均在这个demo里面:https://github.com/sxei/chrome-plugin-demo ,大家可以直接下载下来运行。

另外,本文图片较多,且图片服务器带宽有限,右下角的目录滚动监听必须等到图片全部加载完毕之后才会触发,所以请耐心等待加载完毕。

本文目录:

demo部分截图:

二、前言

2.1. 什么是Chrome插件

严格来讲,我们正在说的东西应该叫Chrome扩展(Chrome Extension),真正意义上的Chrome插件是更底层的浏览器功能扩展,可能需要对浏览器源码有一定掌握才有能力去开发。鉴于Chrome插件的叫法已经习惯,本文也全部采用这种叫法,但读者需深知本文所描述的Chrome插件实际上指的是Chrome扩展。

Chrome插件是一个用Web技术开发、用来增强浏览器功能的软件,它其实就是一个由html、CSS、JS、图片等资源组成的一个.crx后缀的压缩包.

个人猜测crx可能是Chrome Extension如下3个字母的简写:

另外,其实不只是前端技术,Chrome插件还可以配合C++编写的dll动态链接库实现一些更底层的功能(NPAPI),比如全屏幕截图。 , , , "default_icon": "img/icon.png", "default_title": "我是pageAction", "default_popup": "popup.html" ,*/ [ , ], [ ], , , : , 需要直接注入页面的JS [ 表示匹配所有地址 多个JS按顺序注入 JS的注入可以随便一点,但是CSS的注意就要千万小心了,因为一不小心就可能影响全局样式 代码注入的时间,可选值: ], , , jsPath = jsPath || temp = temp.setAttribute( temp.src = chrome.extension.getURL(jsPath); temp.onload = ; chrome-extension://efbllncjkjiijkppagepehoekjojdclc/js/inject.js. Resources must be listed the web_accessible_resources manifest be loaded pages outside the extension.

                 ,  chrome.declarativeContent.onPageChanged.removeRules(   chrome.declarativeContent.onPageChanged.addRules([                              chrome.declarativeContent.PageStateMatcher(       ],       chrome.declarativeContent.ShowPageAction()]        ]); );    contexts: [ onclick:       chrome.tabs.create(+    title:  contexts: [ onclick:  parentId: 1, // 右键菜单项的父菜单项ID。指定父菜单项将会使此菜单项成为父菜单项的子菜单 documentUrlPatterns: // 只在某些页面显示此右键菜单         sidebar.setExpression(    chrome.devtools.inspectedWindow.eval(   html =    (isException) html =    html =    alert(html); ); chrome.devtools.inspectedWindow.eval(   chrome.devtools.panels.openResource(result,         ); ); chrome.devtools.inspectedWindow.eval( chrome.devtools.inspectedWindow.getResources(   alert( );                  ,  : , + text);     suggest([     + text,      + text,      + text,      + text,    ]);     suggest([     + text, + text,     + text, + text,     + text, + text,   ]);     suggest([     + text, + text,     + text, + text,   ]);    + text);  href =    + text; + text.replace( + text.replace( href = + text; openUrlCurrentTab(href); chrome.tabs.query(    ); getCurrentTabId(=>    chrome.tabs.update(tabId,  )  iconUrl:  title:  message:  alert(bg = chrome.extension.getBackgroundPage();views = chrome.extension.getViews(  chrome.tabs.query(   chrome.tabs.sendMessage(tabs[        ); );    sendResponse( + response);   sendResponse(+  customEvent =  hiddenDiv =  hiddenDiv.innerText = data hiddenDiv.dispatchEvent(customEvent);hiddenDiv =  hiddenDiv =  hiddenDiv.style.display =   eventData =  + eventData); port = chrome.tabs.connect(tabId,  port.postMessage( port.onMessage.addListener(   alert(           port.postMessage(    );     port.onMessage.addListener(             );   ...     ], ...  ...     ], ... + currentWindow.id); chrome.tabs.query(    ); chrome.windows.getCurrent(   chrome.tabs.query(        ); );     [                ],showImage; showImage = items.showImage;=>         chrome.notifications.create(                    + details.url,   );        value=onclick=inline because it violates the directive: keyword, a (a nonce (inline execution.

解决方法就是用JS绑定事件:

  • javascript because it violates the directive: keyword, a (a nonce (inline execution.


    9.5. 注入CSS的时候必须小心

    由于通过content_scripts注入的CSS优先级非常高,几乎仅次于浏览器默认样式,稍不注意可能就会影响一些网站的展示效果,所以尽量不要写一些影响全局的样式。

    之所以强调这个,是因为这个带来的问题非常隐蔽,不太容易找到,可能你正在写某个网页,昨天样式还是好好的,怎么今天就突然不行了?然后你辛辛苦苦找来找去,找了半天才发现竟然是因为插件里面的一个样式影响的!


    十、打包与发布

    打包的话直接在插件管理页有一个打包按钮:

    然后会生成一个.crx文件,要发布到Google应用商店的话需要先登录你的Google账号,然后花5个$注册为开发者,本人太穷,就懒得亲自验证了,有发布需求的自己去整吧。


    十一、参考

    11.1. 官方资料

    推荐查看官方文档,虽然是英文,但是全且新,国内的中文资料都比较旧(注意以下全部需要FQ):

  • Chrome插件官方文档主页

  • Chrome插件官方示例

  • manifest清单文件

  • permissions权限

  • chrome.xxx.api文档

  • 模糊匹配规则语法详解

  • 11.2. 第三方资料

    部分中文资料,不是特别推荐:

  • 360安全浏览器开发文档

  • 360极速浏览器Chrome扩展开发文档

  • Chrome扩展开发极客系列博客


  • 十二、附图

    附图:Chrome高清png格式logo:

    作者:小茗同学

    来源:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html


    【版权声明】本着分享学习的目的,本公众号有部分文章来源于网络,版权归原作者所有!若您觉得侵权且要求删除,请您留言或者联系公众号小编,谢谢!
    回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。
    推荐好文
    1、互联网Code Review最佳实践分享
    2、dubbo面试题!会这些,说明你看懂了dubbo源码
    3、Kafka面试题!掌握它才说明你真正懂Kafka
    4、
    Netty 5.0为啥被舍弃?原因竟然是...
    5、
    中台之上——业务架构系列【汇总】
    6、必备瑞士军刀IDEA插件,你使用了哪些
    7、线上热更新代码只需3步 Arthas实战
    8、Eureka源码剖析之七:架构&面试题【总结】
    9、互联网工程师应该用这种姿势打印日志

    干货Chrome插件(扩展)开发全攻略

    【干货】Chrome插件(扩展)开发全攻略

    http://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

     

    以上是关于干货Chrome插件(扩展)开发全攻略2.6w字,看这篇就够了!的主要内容,如果未能解决你的问题,请参考以下文章

    干货Chrome插件(扩展)开发全攻略

    干货Chrome插件(扩展)开发全攻略

    干货Chrome插件(扩展)开发全攻略

    着手编写Chrome插件

    写个简单的chrome插件-京东商品历史价格查询

    开发利器:你的Chrome离开发神器只差这几个扩展