Javascript 如何在contextMenus onclick事件处理程序中获取iframeId?
我正在开发一个Mozilla Web扩展。我只想将一个JavaScript文件插入到我单击了使用Javascript 如何在contextMenus onclick事件处理程序中获取iframeId?,javascript,google-chrome-extension,firefox-addon-webextensions,Javascript,Google Chrome Extension,Firefox Addon Webextensions,我正在开发一个Mozilla Web扩展。我只想将一个JavaScript文件插入到我单击了使用contextMenus.create()创建的上下文菜单选项的框架中 我正在使用: browser.contextMenus.create({ "title": "Records", "contexts": ["all","link"], "id" : "M1", "onclick": onClickContextMenu, }, function() { });
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
?在对我(Chandrakant Thakkar)和我的团队领导Nitin Makwana先生进行了大量测试后,找到了解决这种情况的方法
首先,我将manifest.json文件中的“messageListener.js”文件作为
"content_scripts": [
{
"matches": ["https://*/*","http://*/*"],
"css":["jquery-ui.css"],
"js": [
"jquery.js",
"jquery-ui.js",
"content_scripts/msg_listener.js"
],
"all_frames":true
}
然后在“messageListener.js”文件中创建“contextMenu”侦听器,并在我单击contextMenu(鼠标右键单击)时将消息发送到后台js文件
作为
在这里,”abc@gmail.com“是我要发送消息的web扩展的id
然后,在我的背景js文件中,我声明了名为“clickedFrameID”的全局变量,并在同一个文件中添加了OnMessageListener,如下所示
browser.runtime.onMessage.addListener(
function(msg, sender, callback) {
if(msg.type === 'onContextMenuClicked')
{
if(sender.hasOwnProperty("frameId")){
clickedFrameID=sender.frameId;
}else{
clickedFrameID="";
}
}
});
现在我已经在特定的框架中注入了“fileName.js”文件,如下所示
var clickedFrameID=""; //This is a Global Variable
browser.contextMenus.create({
"title": "Records",
"contexts": ["all","link"],
"id" : "M1",
"onclick": onClickContextMenu,
}, function() { });
function onClickContextMenu(info, tab){
var options={};
if(clickedFrameID !="" && clickedFrameID!=null &&
clickedFrameID!=undefined )
{
options={
file: "fileName.js",
allFrames: false,
frameId: clickedFrameID
};
}
browser.tabs.executeScript(tab.id,options, function() {
console.log("Script injected");
});
}
现在,“fileName.js”将被注入到我右键单击的特定框架中
感谢@wOxxOm、@MohammedAshrafali、@Makyen在做了这么多测试之后对我感兴趣,我的团队领导Nitin Makwana先生找到了解决这种情况的方法 首先,我将manifest.json文件中的“messageListener.js”文件作为
"content_scripts": [
{
"matches": ["https://*/*","http://*/*"],
"css":["jquery-ui.css"],
"js": [
"jquery.js",
"jquery-ui.js",
"content_scripts/msg_listener.js"
],
"all_frames":true
}
然后在“messageListener.js”文件中创建“contextMenu”侦听器,并在我单击contextMenu(鼠标右键单击)时将消息发送到后台js文件
作为
在这里,”abc@gmail.com“是我要发送消息的web扩展的id
然后,在我的背景js文件中,我声明了名为“clickedFrameID”的全局变量,并在同一个文件中添加了OnMessageListener,如下所示
browser.runtime.onMessage.addListener(
function(msg, sender, callback) {
if(msg.type === 'onContextMenuClicked')
{
if(sender.hasOwnProperty("frameId")){
clickedFrameID=sender.frameId;
}else{
clickedFrameID="";
}
}
});
现在我已经在特定的框架中注入了“fileName.js”文件,如下所示
var clickedFrameID=""; //This is a Global Variable
browser.contextMenus.create({
"title": "Records",
"contexts": ["all","link"],
"id" : "M1",
"onclick": onClickContextMenu,
}, function() { });
function onClickContextMenu(info, tab){
var options={};
if(clickedFrameID !="" && clickedFrameID!=null &&
clickedFrameID!=undefined )
{
options={
file: "fileName.js",
allFrames: false,
frameId: clickedFrameID
};
}
browser.tabs.executeScript(tab.id,options, function() {
console.log("Script injected");
});
}
现在,“fileName.js”将被注入到我右键单击的特定框架中
感谢@wOxxOm、@MohammedAshrafali、@Makyen关注是的,我也面临同样的问题。有什么解决办法吗?Thanx。对不起,先生,我在contextMenus中执行的操作单击了事件浏览器。contextMenus。创建({“标题”:“记录”,“上下文”:[“全部”,“链接],“id”:“M1”,“onclick”:onClickContextMenu,},function(){});onClickContextMenu在这个方法中,我注入fileName.js文件,但这里我没有得到当前iframe的帧ID,这里我得到的是“info”和“tab”对象,但不是iFrameId@ChandrakantThakkar然后在你的问题中指定这些信息,而不仅仅是在评论中。因为你现在的问题太广泛了,可能已经结束了。如果您想清楚地说明(并在代码中显示)这是由于在
上下文菜单
项中单击而执行的,那么这可以通过一种方式来回答。我已编辑了您的问题,将您(或多或少)在注释中提供的代码包括在内。如果这不是您想要传达的内容,请回答问题,或者回滚我的编辑。@Makyen您在我的问题代码中添加注释也是正确的。。。谢谢……是的,我也面临同样的问题。有什么解决办法吗?Thanx。对不起,先生,我在contextMenus中执行的操作单击了事件浏览器。contextMenus。创建({“标题”:“记录”,“上下文”:[“全部”,“链接],“id”:“M1”,“onclick”:onClickContextMenu,},function(){});onClickContextMenu在这个方法中,我注入fileName.js文件,但这里我没有得到当前iframe的帧ID,这里我得到的是“info”和“tab”对象,但不是iFrameId@ChandrakantThakkar然后在你的问题中指定这些信息,而不仅仅是在评论中。因为你现在的问题太广泛了,可能已经结束了。如果您想清楚地说明(并在代码中显示)这是由于在上下文菜单
项中单击而执行的,那么这可以通过一种方式来回答。我已编辑了您的问题,将您(或多或少)在注释中提供的代码包括在内。如果这不是您想要传达的内容,请回答问题,或者回滚我的编辑。@Makyen您在我的问题代码中添加注释也是正确的。。。谢谢