我正在开发一个Mozilla WebExtension。我想只将JavaScript文件注入到我点击了使用contextMenus.create()
创建的上下文菜单选项的框架中。
我正在使用:
browser.contextMenus.create({
"title": "Records",
"contexts": ["all","link"],
"id" : "M1",
"onclick": onClickContextMenu,
}, function() { });
function onClickContextMenu(info, tab){
var clickedFrameID=""; //How do I get the actual frameId where click occurred?
browser.tabs.executeScript(tab.id,{
file: "fileName.js",
allFrames: false,
frameId: clickedFrameID
}, function() {
console.log("Script injected");
});
}
如何获得clickedFrameID
?
答案 0 :(得分:0)
经过如此多的测试(Chandrakant Thakkar)和我的团队负责人Nitin Makwana先生为这种情况找到了解决方案,
首先,我在manifest.json文件的所有帧中注入了“messageListener.js”文件
grep
然后在“messageListener.js”文件中创建“contextMenu”监听器并在单击contextMenu(右键单击鼠标)时将消息发送到Background js文件 如
"content_scripts": [
{
"matches": ["https://*/*","http://*/*"],
"css":["jquery-ui.css"],
"js": [
"jquery.js",
"jquery-ui.js",
"content_scripts/msg_listener.js"
],
"all_frames":true
}
这里,“abc@gmail.com”是我想要发送消息的网络扩展的ID。
然后,在我的后台js文件中,我已经在名为“clickedFrameID”的全局变量上声明了,并且在同一个文件中我添加了onMessage Listener,如下所示
document.addEventListener("contextmenu", handleContextMenu, false);
function handleContextMenu(event){
browser.runtime.sendMessage("abc@gmail.com",{type:
"onContextMenuClicked", sender:event });
}
现在我在特定的Frame中注入了“fileName.js”文件
browser.runtime.onMessage.addListener(
function(msg, sender, callback) {
if(msg.type === 'onContextMenuClicked')
{
if(sender.hasOwnProperty("frameId")){
clickedFrameID=sender.frameId;
}else{
clickedFrameID="";
}
}
});
现在,“fileName.js”将在特定的框架中注入,我已经右键单击。
感谢@wOxxOm,@ MohammedAshrafali,@Makyen感兴趣