Chrome 扩展不会在第一次尝试时获得 URL
Chrome Extension won't get URL on the first try
我有一个带有 popup.html 页面的 Google Chrome 扩展。
页面加载时启动的唯一脚本是:
document.addEventListener('DOMContentLoaded', function () {
window.domain = "";
chrome.tabs.getSelected(function (tabs) {
window.domain = tabs.url;
console.log(window.domain);
});
window.enabled = true;
domain = window.domain;
checkStatus();
});
函数 checkStatus 是:
function checkStatus() {
if (enabled === true) {
$(".status").html("Enabled");
$(".statusContainer").css("background-color", "rgb(24, 150, 71)");
$(".powerButton").attr("src", "images/enabled.png");
$(".questionContainer").show("fast");
$(".domain").html("on " + window.domain);
}
else if (enabled === false){
$(".status").html("Disabled");
$(".statusContainer").css("background-color", "rgb(102, 102, 102)");
$(".powerButton").attr("src", "images/disabled.png");
$(".questionContainer").hide("fast");
}
}
但是,当我点击扩展程序的图标打开页面时,我只看到 "on " 而不是 "on google.com,"。但是,当我检查弹出窗口并再次切换到控制台和 运行 checkStatus 时,如果我在 google 上,扩展程序会显示 "on google.com,"。
我不确定是什么原因造成的,但是 console.log 显示了 url,所以我认为这是 checkStatus 函数的问题,因为选项卡是在以下时间加载的我打开弹窗。
这是典型的异步问题
chrome.tabs.getSelected
的回调部分很可能会在您调用 checkStatus()
之后 调用 ,这将导致 window.domain
仍然是空字符串 ""
解决方案:您应该从回调内部调用 checkStatus()
document.addEventListener('DOMContentLoaded', function () {
window.domain = "";
chrome.tabs.getSelected(function (tabs) {
window.domain = tabs.url;
console.log(window.domain);
window.enabled = true;
domain = window.domain;
checkStatus();
});
});
我有一个带有 popup.html 页面的 Google Chrome 扩展。
页面加载时启动的唯一脚本是:
document.addEventListener('DOMContentLoaded', function () {
window.domain = "";
chrome.tabs.getSelected(function (tabs) {
window.domain = tabs.url;
console.log(window.domain);
});
window.enabled = true;
domain = window.domain;
checkStatus();
});
函数 checkStatus 是:
function checkStatus() {
if (enabled === true) {
$(".status").html("Enabled");
$(".statusContainer").css("background-color", "rgb(24, 150, 71)");
$(".powerButton").attr("src", "images/enabled.png");
$(".questionContainer").show("fast");
$(".domain").html("on " + window.domain);
}
else if (enabled === false){
$(".status").html("Disabled");
$(".statusContainer").css("background-color", "rgb(102, 102, 102)");
$(".powerButton").attr("src", "images/disabled.png");
$(".questionContainer").hide("fast");
}
}
但是,当我点击扩展程序的图标打开页面时,我只看到 "on " 而不是 "on google.com,"。但是,当我检查弹出窗口并再次切换到控制台和 运行 checkStatus 时,如果我在 google 上,扩展程序会显示 "on google.com,"。
我不确定是什么原因造成的,但是 console.log 显示了 url,所以我认为这是 checkStatus 函数的问题,因为选项卡是在以下时间加载的我打开弹窗。
这是典型的异步问题
chrome.tabs.getSelected
的回调部分很可能会在您调用 checkStatus()
之后 调用 ,这将导致 window.domain
仍然是空字符串 ""
解决方案:您应该从回调内部调用 checkStatus()
document.addEventListener('DOMContentLoaded', function () {
window.domain = "";
chrome.tabs.getSelected(function (tabs) {
window.domain = tabs.url;
console.log(window.domain);
window.enabled = true;
domain = window.domain;
checkStatus();
});
});