Javascript Chrome扩展,Chrome.tabs.query的结果未定义

Javascript Chrome扩展,Chrome.tabs.query的结果未定义,javascript,html,google-chrome,google-chrome-extension,Javascript,Html,Google Chrome,Google Chrome Extension,我是一名HTML/Javascript新手,试图创建一个简单的浏览器操作“chrome extension”。我花了几个小时试图让其中的一部分正常工作。当弹出窗口打开时,当单击ID为“Demo”的元素时,会出现一个名为“myBtn”的按钮“应该从文本更改为innerHTML,这是当前选项卡的Url。我已经设法达到一个点,点击按钮时,默认文本被替换为“未定义”。我为解决这个问题所做的每一次改变似乎都会让我倒退。我在这个网站和其他网站上读过很多帖子,但无法解析。有人看到我的代码中阻止Url显示的错误

我是一名HTML/Javascript新手,试图创建一个简单的浏览器操作“chrome extension”。我花了几个小时试图让其中的一部分正常工作。当弹出窗口打开时,当单击ID为“Demo”的元素时,会出现一个名为“myBtn”的按钮“应该从文本更改为innerHTML,这是当前选项卡的Url。我已经设法达到一个点,点击按钮时,默认文本被替换为“未定义”。我为解决这个问题所做的每一次改变似乎都会让我倒退。我在这个网站和其他网站上读过很多帖子,但无法解析。有人看到我的代码中阻止Url显示的错误吗

我在清单中有“tabs”和“activeTab”权限。有关守则如下:

"manifest_version": 2,
"name": "Sample",
"description": "This extension launches Form on current page",
"version": "1.0",

"icons": { "128": "ITVCicon128x128.png" },

"browser_action": {
"default_icon": "ITVCicon.png",
"default_popup": "popup.html"
 },
"permissions": [
      "tabs",
  "activeTab",
      "https://ajax.googleapis.com/"
Popup.html是:

<!DOCTYPE html>
<html>
<body>
<h1>My Web Page</h1>
<p> click the button to get the current tab URL for cut/paste  <button
id="myBtn"> Try it</button> </p>
<p id="demo">Url displays Here</p>
<script src="popup.js"></script>
</body>
</html>

我修改了你的
popup.js
,并使用了
DOMContentLoaded
,就像Chrome建议的那样:

popup.js

function geturl() {
  chrome.tabs.query({currentWindow: true, active: true}, function (tabs){
  var tabURL = tabs[0].url;
     document.getElementById("demo").innerHTML = tabURL; //The line I changed to pass the URL to html.
   });
}

document.addEventListener("DOMContentLoaded", function() {
  document.getElementById("myBtn").addEventListener("click", geturl);
});
<!DOCTYPE html>
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
<h1>My Web Page</h1>
<p> click the button to get the current tab URL for cut/paste  
<button id="myBtn"> Try it</button> </p>
<p id="demo">Url displays Here</p>
</body>
</html>
所以您不必将
popup.js
放在
popup.html
的正文末尾。我改为:

popup.html

function geturl() {
  chrome.tabs.query({currentWindow: true, active: true}, function (tabs){
  var tabURL = tabs[0].url;
     document.getElementById("demo").innerHTML = tabURL; //The line I changed to pass the URL to html.
   });
}

document.addEventListener("DOMContentLoaded", function() {
  document.getElementById("myBtn").addEventListener("click", geturl);
});
<!DOCTYPE html>
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
<h1>My Web Page</h1>
<p> click the button to get the current tab URL for cut/paste  
<button id="myBtn"> Try it</button> </p>
<p id="demo">Url displays Here</p>
</body>
</html>

我的网页
单击按钮以获取剪切/粘贴的当前选项卡URL
试试看

Url显示在此处


最后,我对它进行了测试。

Tabs.query是异步的;它不会返回任何东西。看啊,上帝。不,不是
DOMContentLoaded
起作用@gui47,您能在这里突出显示实际有用的代码更改吗?不需要更改
DOMContentLoaded
(脚本标记位于元素后面)。@Xan我已修改注释,该注释指示我更改代码的位置。