Javascript范围问题?

时间:2015-08-04 20:01:20

标签: 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>');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="pageURL"></div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

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>');
    });
}