JavaScript 范围问题?

标签 javascript google-chrome-extension

我正在为 Chrome 编写扩展程序,但在更新变量时遇到问题。我试图获取 URL 和域名并将其显示在扩展弹出窗口中,但显示的只是“[object HTMLDivElement]”。我认为这可能是一个范围问题,但我不确定为什么下面的函数没有更新全局变量。

$(function() {
	var urlStr = "";
	var domain = "";
	urlStr = getURL();

	function getURL(){
		chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
			var activeTab = tabs[0];
			var url = activeTab.url;
			var urlParts = activeTab.url.replace('http://','').replace('https://','').split(/[/?#]/);
			domain = urlParts[0];
		});
		return url;
	}
  
  
  $('#pageURL').append('<h3>' + domain + '<h3>');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="pageURL"></div>

最佳答案

chrome.tabs.query 是异步的,因此当执行 $('#pageURL').append... 行时它仍然会运行。您所需要做的就是将该行移至 query 回调中:

$(function() {    
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        var activeTab = tabs[0];
        var domain = activeTab.url.replace(/http[s]?\:\/\//, '').split(/[/?#]/).shift();
        $('#pageURL').append('<h3>' + domain + '<h3>');
    });
}

关于JavaScript 范围问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818242/

相关文章:

Javascript 同时创建对象和数组

javascript 作用域,为什么 $(this) 等于 [window]?

javascript - 在 chrome 扩展中使用 html5 blob 下载文件

google-chrome - 是否可以创建浏览器扩展以允许传入请求?

google-chrome - 如何使用 chrome 扩展更改当前选项卡的标题

javascript - 如何在页面中注入(inject)的函数表达式中使用变量?

javascript - 如何正确使用通过Firebase身份验证获得的Facebook token ?

javascript - 如何在 php 中添加纬度和经度编码,因为它显示 map 图标,但如果我们单击它会出现错误的 URL

javascript - BitGO - 从对象数组中获取最小值

javascript - Chrome 扩展程序错误 : "Unchecked runtime.lastError while running browserAction.setIcon: No tab with id"