我一直在研究异步函数调用,以及如何将变量设置为它们的值,并且在使用过程中遇到了很多麻烦。我想创建一个端口来发送带有content.js
扩展名的文件的消息。
为此,我需要接收已打开的窗口的选项卡,并id
在chrome.tabs.connect()
函数中使用其属性。此实现无法接通任何console.log()
电话,但我对异步编程的了解不够深,无法理解。有人能帮忙吗?我的问题是两个文件没有通信,因此端口没有打开。
<script language = "Javascript">
function foo(callback){
var port = chrome.tabs.connect(chrome.tabs.query({ currentWindow: true, active: true }, function(tabs) {
//sets curTab to current tab
console.log(tabs[0]);
var curTab;
setTimeout(function(tabs) {
curTab = tabs[0];
console.log(curTab);
}, 5000);
}),{name: "mode"})
//both files are preset to this so no need to message
var mode = "on";
document.getElementById("stop").onclick = function(){
if(mode === "off")
mode = "on";
else
mode = "off";
setMode();
console.log("clikityclik");
};
console.log(mode);
function setMode(){
/*sends message to port*/
if(port)
port.postMessage({newMode: mode});
else{
console.log("error: port not created");
}
}
}
我content.js
文件中的相关代码如下。我一次调用此函数
function getMode(){
/*receives message from port
**communicates with sandboxed.html
*/
chrome.runtime.onConnect.addListener(function(port) {
console.assert(port.name == "mode");
port.onMessage.addListener(function(msg) {
if (msg.newMode){
mode = msg.newMode;
console.log("Mesage received: "+mode);
}
else
console.log("error receiving new mode, last mode was: " + mode);
});
});
}
该程序的目标是让第一个脚本在content.js
单击div时将消息发送到,并让“ content.js”文件在发送消息时接收这些消息。
解决方案是创建一个带有选项卡输入的创建端口的函数。基本上,getTab
将尝试获取选项卡的值,如果我们有一个选项卡,它将运行回调函数,createPort
该函数包含创建端口所需的信息以及单击的事件处理程序div
。
function getTab(callback){
chrome.tabs.query({ currentWindow: true, active: true }, function(tabs) {
console.log(tabs[0]);
callback(tabs[0]);
});
}
function createPort(tab){
var port = chrome.tabs.connect(tab.id,{name: "mode"});
document.getElementById("stop").onclick = function(){
if(mode === "off")
mode = "on";
else
mode = "off";
setMode(port);
console.log("clikityclik");
};
}
var mode = "on"; //mode is preset to on in content.js
getTab(createPort);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句