34

我创建了一个 JavaScript 变量,当我单击按钮时,它应该增加 1,但它没有发生。

这是manifest.json.

{
  "name":"Facebook",
  "version":"1.0",
  "description":"My Facebook Profile",
  "manifest_version":2,
  "browser_action":{
    "default_icon":"google-plus-red-128.png",
    "default_popup":"hello.html"
  }
}

这是html页面的代码

<!DOCTYPE html>
<html>
<head>
<script>
var a=0;
function count()
{
  a++;
  document.getElementById("demo").innerHTML=a;
  return a;
}
</script>
</head>
<body>
<p id="demo">=a</p>
<button type="button" onclick="count()">Count</button>
</body>
</html>

我希望扩展程序向我显示 a 的值,并在我每次单击扩展程序或按钮时将其增加一

扩展的图片

4

2 回答 2

150

您的代码无法正常工作,因为它违反了默认的Content Security Policy。我创建了一个一分钟的截屏视频来显示问题所在:

截屏

首先,我展示了如何调试问题。右键单击您的弹出按钮,然后单击“检查弹出窗口”。执行此操作后,您将看到以下错误消息:

拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self' chrome-extension-resource:”。

这说明您的代码不起作用,因为它违反了默认 CSP:将不会执行内联 JavaScript。要解决此问题,您必须从 HTML 文件中删除所有内联 JavaScript,并将其放入单独的 JS 文件中。

结果如下所示:

hello.html(弹出页面)

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p id="demo">=a</p>
<button type="button" id="do-count">Count</button>
<script src="popup.js"></script>
</body>
</html>

popup.js

var a=0;
function count() {
    a++;
    document.getElementById('demo').textContent = a;
}
document.getElementById('do-count').onclick = count;

请注意,我已替换innerHTMLtextContent. 学会使用textContent而不是innerHTML当你打算改变文本时。在这个简单的例子中,这无关紧要,但在更复杂的应用程序中,它可能会成为 XSS 形式的安全问题。

于 2013-07-12T10:36:22.990 回答
-1

改变你的onclick

onclick="count"

将您的计数功能更改为以下内容:

function count()
{

    var demo = document.getElementById("demo");
    return function() {
        demo.innerHTML = ++a;
    }

}

这是我放在一起的一个很好的演示:

代码(这假设您添加id="the_button"到您的按钮):

window.onload = function () {
    var button = document.getElementById("the_button");
    button.onclick = count();

    function count() {
        var a = 0;
        var demo = document.getElementById("demo");
        return function () {
            demo.innerHTML = ++a;
        }
    }
}

演示:http: //jsfiddle.net/maniator/ck5Yz/

于 2013-07-11T19:20:45.517 回答