chrome插件开发——将页面复制到微信公众平台

之前写的将html网页中的元素复制到微信编辑器中的代码,并不是很实用,那么就想着能否做一个Chrome小插件,实现该功能,这样就可以方便的将页面复制到微信公众平台编辑器中了。

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

我们需要实现的就是下图中的小猪图标
这里写图片描述
话不多说,直接开始从代码介绍吧。

首先介绍下代码的核心文件

manifest.json

这是一个Chrome插件最重要也是必不可少的文件,用来配置所有和插件相关的配置,必须放在根目录。其中,manifest_version、name、version3个是必不可少的,description和icons是推荐的。

{
    // 清单文件的版本,这个必须写,而且必须是2
    "manifest_version": 2,
    // 插件的名称
    "name": "demo",
    // 插件的版本
    "version": "1.0.0",
    // 插件描述
    "description": "简单的Chrome扩展demo",
    // 图标,一般偷懒全部用一个尺寸的也没问题
    "icons":
    {
        "16": "img/icon.png",
        "48": "img/icon.png",
        "128": "img/icon.png"
    },
    // 浏览器右上角图标设置,browser_action、page_action、app必须三选一
    "browser_action": 
    {
        "default_icon": "img/icon.png",
        // 图标悬停时的标题,可选
        "default_title": "这是一个示例Chrome插件",
        "default_popup": "popup.html"
    },
    // 当某些特定页面打开才显示的图标
    /*"page_action":
    {
        "default_icon": "img/icon.png",
        "default_title": "我是pageAction",
        "default_popup": "popup.html"
    },*/
    // 需要直接注入页面的JS
    "content_scripts": 
    [
        {
            //"matches": ["http://*/*", "https://*/*"],
            // "<all_urls>" 表示匹配所有地址
            "matches": ["<all_urls>"],
            // 多个JS按顺序注入
            "js": ["js/jquery-1.8.3.js", "js/content-script.js"],
            // JS的注入可以随便一点,但是CSS的注意就要千万小心了,因为一不小心就可能影响全局样式
            "css": ["css/custom.css"],
            // 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle
            "run_at": "document_start"
        }
    ],
    // 权限申请
    "permissions":
    [
        "contextMenus", // 右键菜单
        "tabs", // 标签
        "notifications", // 通知
        "webRequest", // web请求
        "webRequestBlocking",
        "storage", // 插件本地存储
        "http://*/*", // 可以通过executeScript或者insertCSS访问的网站
        "https://*/*" // 可以通过executeScript或者insertCSS访问的网站
    ],
}

popup.html

popup是点击browser_action或者page_action图标时打开的一个小窗口网页,焦点离开网页就立即关闭,我们需要用到这个来出发复制的事件。

<html>
    <head>
        <meta charset="utf-8" />
        <style>
            body{
                width: 80px;
                height: 50px;
            }
            .Btn{
                background-color: rgb(80, 176, 246);
                border: none;
                color: white;
                padding: 4px 5px;
                border-radius: 4px;
                margin: 5px 0;
                width: 80px;
            }
        </style>
    </head>
    <body>
        <div>
            <button id="Btn2" class="Btn" onclick="change()">复制图文</button>
        </div>
        <script src="js/jquery-3.3.1.min.js"></script>
        <script src="js/popup.js"></script>
    </body>
</html>

popup.js

popup.js则是通过popup.html来引入,对popup.html小页面来进行操作的js代码

function sendMessageToContentScript(message, callback)
{
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs)
    {
        chrome.tabs.sendMessage(tabs[0].id, message, function(response)
        {
            if(callback) callback(response);
        });
    });
}
// 复制图文发送请求
$("#Btn2").click(function () {//给web页面的按钮绑定点击事件,通过点击事件来控制发送消息
    sendMessageToContentScript({cmd:'copy_article', value:'Copy article start!'}, function(response)
    {
        console.log('来自content的回复:'+response);
    });
});

content-scripts.js

content-scripts,就是Chrome插件中向页面注入脚本的一种形式,我们可以借助content-scripts我们可以实现通过配置的方式轻松向指定页面注入JS和CSS,这个也是我们要重点使用的功能。

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse)
{
    if(request.cmd == 'copy_article'){
        var temp = document.getElementById("js_content").innerHTML;
        document.addEventListener('copy',myFunction);
        function myFunction(e) {
            e.preventDefault(); 
            e.clipboardData.setData('text/html', temp);
        }
        document.execCommand("copy");
        alert("已复制好,可贴粘。");
        sendResponse('Copy article over !');
    }
});

我的思路是:在popup.html中写一个button的按钮,然后在popup.js中进行操作,但是popup.js不能直接操作浏览器dom,而content-scripts.js可以,所以我就希望能够在popup.js中给button绑定一个点击事件,然后通过popup.js来发送一个消息给content-scripts.js等content-scripts.js收到了消息后就开始多页面dom进行操作,来实现复制的功能。
但是现在的首要问题就是content-scripts.js与popup.js之间如何通信呢?
经过查阅资料,了解到content-scripts.js与popup.js的通信是通过chrome.runtime.sendMessage、chrome.runtime.connect来实现的。
eg:
popup.js先发送请求给content-scripts.js

function sendMessageToContentScript(message, callback)
{
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs)
    {
        chrome.tabs.sendMessage(tabs[0].id, message, function(response)
        {
            if(callback) callback(response);
        });
    });
}
sendMessageToContentScript({cmd:'test', value:'你好,我是popup!'}, function(response)
{
    console.log('来自content的回复:'+response);
});

content-scripts.js接收到后给响应给popup.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse)
{
    // console.log(sender.tab ?"from a content script:" + sender.tab.url :"from the extension");
    if(request.cmd == 'test') alert(request.value);
    sendResponse('我收到了你的消息!');
});

现在代码有了,就要放在Chrome中了,我们点击更多工具中的扩展程序
这里写图片描述
开启开发者模式
这里写图片描述
最后点击加载已解压的扩展程序,找到文件路径,确认即可

文档推荐:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值