Chrome tab.create 和 tab.getSelected

Posted

技术标签:

【中文标题】Chrome tab.create 和 tab.getSelected【英文标题】:Chrome tab.create and tab.getSelected 【发布时间】:2011-08-14 13:18:30 【问题描述】:

我在将消息从后台页面传递到我的 content_script.js 时遇到了一些问题。我希望有人能指出我哪里错了。

background.html

//在一个函数中 功能我的功能() chrome.tabs.create("url":"myurl","selected":true,function(tab) updateTab(tab.id); ); //更新创建的新标签 函数更新标签(tabId) chrome.tabs.getSelected(null, function(tab) makeRequest(tab.id); ); //发出请求 函数 makeRequest(tabId) chrome.tabs.sendRequest(tabId, greeting: "hello", function(response) console.log(response.farewell); );

content_script.js

chrome.extension.onRequest.addListener( 功能(请求,发送者,发送响应) 控制台日志(发件人标签? “来自内容脚本:” + sender.tab.url : “从扩展”); if (request.greeting == "你好") 发送响应(告别:“再见”); 别的 发送响应(); // 冷落他们。 );

manifest.json

“权限”:[ "标签","通知","http://*/*" ], “内容脚本”:[ "匹配": ["http://*/*","https://*/*"], “js”:[“content_script.js”] ],

我的问题是来自 background.html 的请求从未传递给 content_script.js。我认为创建新选项卡和选择该选项卡的顺序一定存在一些问题,但我不知道如何解决这个问题。 谢谢。

编辑: 到目前为止我所做的就是这样。

background.html

chrome.browserAction.onClicked.addListener(function(tab) var tabId = tab.id; chrome.tabs.getSelected(null, function(tab) 验证(tab.url,tabId); ); ); 功能验证(网址,tabId) 变种过滤器=支持(网址); 如果(过滤器!=空) getHTML(tabId,url,filter); 别的 var notification = webkitNotifications.createHTMLNotification( 'notification.html' // html url - 可以是相对的 ); 通知.show(); 设置超时(函数() 通知.取消(); , 10000); //10 秒 函数getHTML(tabId,url,过滤器) console.log("请求"); chrome.tabs.sendRequest(tabId, action:"getHTML", function(response) var html = response.html; 控制台.log(html); var taburl = ("服务器上有东西"); chrome.tabs.create("url":taburl,"selected":true, function(tab) var tabId = tab.id; chrome.tabs.onUpdated.addListener(函数(tabId,changeInfo) if(changeInfo.status == "加载") console.log("正在加载"); 如果(changeInfo.status ==“完成”) chrome.tabs.onUpdated。 removeListene(arguments.callee); updateTab(tabId,url,filter,html); ); ); ); 函数 updateTab(tabId,url,filter,html) chrome.tabs.sendRequest(tabId, action:"updateTab", function(response) //提交表格 chrome.tabs.executeScript(tabId, code: 'document.getElementById(\"hiddenbutton\").click();'); );

content_script.js

chrome.extension.onRequest.addListener( 功能(请求,发送者,发送响应) var action = request.action; 控制台.log(动作); 如果(动作==“getHTML”) var html = 文档.body.innerHTML; 控制台.log(html); sendResponse(html:document.body.innerHTML); 别的 //从服务器更新页面 发送响应(); );

它按我的预期工作,但仍有一些我不明白的地方,特别是删除监听器 chrome.tabs.onUpdated.removeListene(arguments.callee);。我希望如果有人有机会看看并纠正我,如果有任何问题。谢谢。

【问题讨论】:

【参考方案1】:

background.html 可以简化为:

//in a function
function myFunction() 
    chrome.tabs.create("url":"myurl","selected":true, function(tab)
        makeRequest(tab.id);
    );


//make request
function makeRequest(tabId) 
    chrome.tabs.sendRequest(tabId, greeting: "hello", function(response) 
        console.log(response.farewell); 
    );

如果仍然无法正常工作,则可能是因为选项卡尚未完成加载(在 chrome.tabs.create 回调中记录 tab.status 以检查是否为真)。对此有两种解决方案,或者您在过滤此选项卡 ID 时将侦听器添加到 chrome.tabs.onUpdated,或者您使用 tab send the request 而不是 background.html。

【讨论】:

以上是关于Chrome tab.create 和 tab.getSelected的主要内容,如果未能解决你的问题,请参考以下文章

tab

vue中的tab

QTabWidget修改tabbar的大小

用空格替换制表符

sed:保持模式并重新排列线

vue数据缓存