Chrome插件Content Scripts关闭当前页的方法
在制作Chrome插件的过程中,我使用Content Scripts注入到当前页中,想实现当点击页面的按钮后关闭当前页面(tab)。
习惯性调用:window.close(),结果报错:Scripts may close only the windows that were opened by it
。
好吧,google之,网友提供了以下方法:
window.opener = null; | |
window.open('','_self'); | |
window.close(); |
经尝试依然报错无效,就算使用了所谓的hack,即
window.open(' ','_self'); |
加多了一个空格之后,发现页面也是刷新了一下(可能的关闭又再打开)。
最后在http://stackoverflow.com/questions/19761241/window-close-and-self-close-do-not-close-the-window-in-chrome看到讨论,大概意思是Chrome的新版本加强了安全性和谐了hack云云。
然后有人建议使用Chrome的API。
查阅了文档后,尝试直接在Content Scripts调用chrome.tabs.remove(id)
来移除,结果报错说找不到该函数。
继续查阅文档后发现Content Scripts是没有权限调用这个的,但是可以通过sendMessage来发送消息给background.js(插件后台)。
于是采用以下方法:
// Content Scripts中 | |
$("#quit_button").click(function() { | |
chrome.extension.sendMessage({greeting: "close_tab"}); | |
}); | |
// background.js中 | |
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { | |
console.log("Request comes from content script " + sender.tab.id); | |
if (request.greeting === "close_tab"){ | |
chrome.tabs.remove(sender.tab.id); | |
} | |
}); |
先在background.js中注册消息处理函数,当点击按钮时,Content Scripts向插件后台发送消息,该消息触发其调用chrome.tabs.remove(id)
来关闭该页面。
这样就间接实现了预期目标。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2017-03-03 comboBox绑定字典Dictionary 获取value中的值
2016-03-03 git bash 出现vim的时候怎么退出