小技巧 | Chrome 插件如何完成剪切板的操作!

35dffe0155cfb5e3e2cfc1a9187d1c67.jpeg

大家好,我是安果!

之前写过一篇文章,谈到在开发 Chrome 插件时常用的一些 Tips

干货 | 盘点 Chrome 插件开发中那些关键的点!

有时候,我们可能需要通过浏览器操作系统剪切板,以此来简化操作、提升工作效率

本篇文章通过一个实例聊聊 Chrome 插件开发与剪切板的那些事

1. 右键菜单

假设我们的使用场景是:通过右键菜单(这里以最简单的一级菜单为例),调用一个接口,然后解析后将数据拷贝到剪切板,最后我们可以直接使用这个数据

实现右键菜单只需要下面 3 个步骤

1-1  新建右键菜单

在 background.js 中,监听 Chrome 插件的安装事件,使用下面的语法创建一个右键菜单

语法:

chrome.contextMenus.create({type:'normal',title:'',id:'menu_id',contexts:['all'],documentUrlPatterns,parentId})

其中

  • type  菜单类型

    值可设置为:normal(默认)、checkbox、radio、separator

  • title  用于指定菜单的名称文案

  • id  为菜单的元素 id,方便后面的监听事件处理

  • contexts  用于设置什么时候显示菜单(可以配置划词显示或一直显示

  • documentUrlPatterns  设置匹配的 URL 才展示右键菜单

  • parentId  用于指定右键菜单项的父菜单项的 id

    将使此菜单项作为父菜单项的子菜单项

//background.js

//新增一个右键菜单(只创建一次)
chrome.runtime.onInstalled.addListener(() => {
    chrome.contextMenus.create({
        type: 'normal',
        title: "测试菜单",
        id: 'menu_test',
        contexts: ['all']
    })
});

1-2  监听事件

接着,为上面的右键菜单添加一个点击监听事件

PS:具体的处理后面会讲到

//background.js

//右键菜单点击事件处理
chrome.contextMenus.onClicked.addListener(
    (info, tab) => {
       if(info.menuItemId=='menu_test'){
            //捕获到点击事件后的具体处理
            //...
        }
    }
)

1-3  配置权限

最后,我们在 manifest.json 中配置需要右键菜单的权限

//manifest.json

...
 "permissions": [
    "contextMenus",
    ...
  ]
...

2. 事件处理及消息通信

在上面的监听事件中,我们添加一个函数用于调用接口获取数据

2-1  事件处理

//background.js

...
function handle_menu_click(){
    const url = URL_
    fetch(url,{method:'GET'}).then((response)=>response.json())
    .then((json)=>{
        //获取响应结果
        let data = json.data;
        console.log("data:",data);
        //发送消息给Content Script
        ...
    }).catch((error)=>{
        console.log("请求异常,错误信息:",error);
    })
}
...

然后,使用 Content Script 和 Background 之间的消息通信,将数据结果发送给 Content Script 进行处理

PS:Background 受限于 Windows 对象,不能操作剪切板

2-2  发送消息

从 Background 中发送消息,将解析后的数据发送给 Content Script 中

//background.js

...
//发送消息
getCurrentTab(function(currentTab){
            console.log(currentTab);
            console.log(currentTab.id);
            //过滤标签页
            if(currentTab.url!=="chrome://newtab/"){
                chrome.tabs.sendMessage(currentTab.id,{clipboard:data },(response) => {
                    console.log(
                    `background收到信息:`,response
                    );
                });
            }
        })
..

2-3  接受消息

在 Content Script 中添加一个消息监听用于处理 Background 发过来的消息

//Content Script

//监听事件
try {
    chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
      sendResponse('收到消息了!');
      if (request.clipboard) {
            sendResponse('收到消息了!');
            try {
                // 剪切板操作
                copyHandle(request.clipboard, sendResponse);
            } catch (error) {
                console.log("处理剪切板异常!")
            } finally {
                sendResponse('数据已经复制到剪切板!');
            }
        } else {
            console.log("其他消息");
        };
    });
} catch (error) {
    console.log("监听消息产生异常,error:", error)
}
}

3. 剪切板

在 Content Script 中,我们可以直接对剪切板进行操作,将消息内容拷贝到系统剪切板,然后使用 alert 在浏览器中弹出一个提示信息

需要注意的是,写入剪切板偶尔会出现异常,我们需要捕获异常,否则插件会出现错误信息

//Content Script

...
function copyHandle(text) {
    if (!navigator.clipboard) {
        fallbackCopyTextToClipboard(text);
        return;
    }

    navigator.clipboard.writeText(text)
        .then(() => {
            alert('数据已经上传到剪切板,请进行下一步操作!')
        })
        .catch(err => {
            console.error('无法复制此文本,异常信息如下', err);
        });
}
...

经过上面的操作,我们就实现了右键菜单点击动作到获取数据,然后拷贝到系统剪切板,最后浏览器提示的完整流程,有这种需求的小伙伴可以试试!

推荐阅读

自动化篇 | 实现自动化抢茅台超详细过程!

5 分钟,教你从零快速编写一个油猴脚本!

爬虫工具篇 - 必会用的 6 款 Chrome 插件

Chrome 插件开发中那些关键的点!

END

好文和朋友一起看~

### 回答1: 在 Chrome 扩展插件复制内容到剪切板可以使用 Clipboard API。下面是一个示例代码: ``` document.addEventListener('copy', (event) => { event.clipboardData.setData('text/plain', '复制的内容'); event.preventDefault(); }); document.execCommand('copy'); ``` 这段代码会在复制事件触发时将字符串 "复制的内容" 复制剪切板。 注意: Clipboard API 仅在 https 和 localhost 中可用。 需要添加权限"clipboardRead" and "clipboardWrite" 在manifest.json 中加入 ``` "permissions": [ "clipboardRead", "clipboardWrite" ] ``` ### 回答2: Chrome 扩展插件开发是指开发用于增强Chrome浏览器功能的小型应用程序。复制内容到剪切板是其中一种常见需求,以下是一个示例: 在Chrome扩展插件开发中,复制内容到剪切板是一种非常常见的需求。通过插件开发,我们可以实现在浏览器中选中文本后,通过点击插件按钮或者使用快捷键,将选中的内容复制剪切板中。 实现这个功能,我们需要使用Chrome扩展API中的 `clipboard` 权限和相应的方法。首先,在插件的manifest.json文件中声明需要使用的权限: ``` { "manifest_version": 2, "name": "复制内容到剪切板示例", "version": "1.0", "permissions": [ "clipboardWrite" ], "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "icons": { "16": "icon.png", "48": "icon.png", "128": "icon.png" } } ``` 接下来,在popup.html中添加一个按钮元素,并在popup.js中为按钮添加点击事件监听器: ```html <!DOCTYPE html> <html> <head> <title>复制内容到剪切板示例</title> <script src="popup.js"></script> </head> <body> <button id="copyBtn">复制选中内容</button> </body> </html> ``` ```javascript document.addEventListener('DOMContentLoaded', function() { var copyBtn = document.getElementById('copyBtn'); copyBtn.addEventListener('click', function() { chrome.tabs.executeScript( { code: "window.getSelection().toString();" }, function(selection) { var text = selection[0]; copyToClipboard(text); }); }, false); }); function copyToClipboard(text) { var textarea = document.createElement("textarea"); document.body.appendChild(textarea); textarea.value = text; textarea.select(); document.execCommand("copy"); document.body.removeChild(textarea); } ``` 以上代码通过监听按钮的点击事件,使用 `executeScript` 方法获取当前选择的文本内容,并将其传递给自定义的 `copyToClipboard` 函数。该函数在页面中动态创建一个隐藏的文本框,将文本赋值给文本框,然后通过 `execCommand("copy")` 方法将文本复制剪切板中。 通过以上简单示例,我们可以看到如何在Chrome扩展插件开发实现将选中内容复制剪切板的功能。整个过程依赖于Chrome扩展API中的 `clipboard` 权限和相应的方法,开发者可以根据需求进行扩展和修改。 ### 回答3: Chrome扩展插件是一种能够增强Chrome浏览器功能的工具。开发Chrome扩展插件可根据个人需求,定制化地实现特定功能。在开发Chrome扩展插件时,复制内容到剪切板是一个常见的需求。 要实现Chrome扩展插件复制内容到剪切板,我们可以借助Chrome的API,如`chrome.tabs`和`chrome.extension`等。 首先,我们需要在扩展插件的`manifest.json`文件中声明使用`clipboardWrite`权限,以便能够访问剪切板的写入功能。 然后,在扩展插件的主要逻辑中,我们可以通过使用`chrome.tabs.executeScript`方法向当前活动标签页注入一个自定义的JavaScript脚本。 这个自定义的脚本可以通过`document.execCommand('copy')`来复制当前选中的内容到剪切板。使用`execCommand('copy')`命令可以模拟用户手动复制操作。 在执行完脚本后,可以通过`chrome.extension.getBackgroundPage().chrome.extension.sendMessage`方法将复制操作结果传递给扩展插件的background.js后台脚本。 在background.js中,我们可以使用`chrome.extension.onMessage`监听消息,然后将复制操作的结果存储到剪切板中。 最后,我们可以通过向用户显示一个通知或者通过其他方式提示复制操作完成。 总的来说,开发Chrome扩展插件实现复制内容到剪切板的功能,首先需要声明相应的权限,然后通过注入自定义脚本实现复制操作,再通过消息传递和后台脚本将结果存储到剪切板中。以上就是一个示例,具体的实现方式还可以根据具体需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值