javascript - Chrome 扩展程序的 HTML/Javascript 不能正常工作

标签 javascript html google-chrome-extension

所以我正在尝试制作一个 chrome 扩展。当我将它作为普通 html 页面运行时,我的代码工作正常,但是当我使用浏览器操作时,我的启用/禁用按钮不起作用。当我按下启用时它没有做任何事情(它应该切换到禁用)。想知道是否有一些我不知道的东西,比如权限之类的。我没有在我的 json 页面中设置任何权限,但我认为这不是问题所在。想知道你们是否可以看看我错过了什么。这是我的代码。

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="nosidebar.css">
        <script type="text/javascript">
            function enableBtn(){
                document.getElementById("btn1").style.display = "none";
                document.getElementById("btn2").style.display = "";
                return false;
            }

            function disableBtn(){
                document.getElementById("btn2").style.display = "none";
                document.getElementById("btn1").style.display = "";
                return false;
            }

        </script>
    </head>
    <body>
    <div id="button">
        <a href="javascript:void(0)" class="myButton1" title="Click to disable" id="btn1" style="display:;" onclick="enableBtn(); return false;">Enabled</a>
        <a href="javascript:void(0)" class="myButton2" title="Click to enable" id="btn2" style="display:none;" onclick="disableBtn(); return false;">Disabled</a>
    </div>
    <div id="text">
        You must refresh the page for the change to take effect.
    </div>
    </body>
</html>

感谢@duskwuff 我已经解决了我的问题。我创建了一个单独的 js 文件并使用了以下代码。

function enableBtn(){
    document.getElementById("btn1").style.display = "none";
    document.getElementById("btn2").style.display = "";
    return false;
}

function disableBtn(){
    document.getElementById("btn2").style.display = "none";
    document.getElementById("btn1").style.display = "";
    return false;
}

document.addEventListener('DOMContentLoaded', function () {
    document.getElementById("btn1").addEventListener("click", enableBtn);
    document.getElementById("btn2").addEventListener("click", disableBtn);
});

最佳答案

作为 Google Chrome 扩展的一部分的 HTML 页面总是有一个内容安全策略集,它禁止在属性(例如 onclick)和内联 <script> 中使用内联脚本。标签。您需要在单独的 Javascript 文件中定义这些脚本,并在该脚本中绑定(bind)事件处理程序,例如

<script src="nosidebar.js"></script>

在那个文件中:

function enableBtn() { ... }
function disableBtn() { ... }

document.getElementById("btn1").addEventListener("click", enableBtn);
document.getElementById("btn2").addEventListener("click", disableBtn);

有关内容安全政策及其与 Chrome 扩展程序的关系的更多信息,请参阅:

https://developer.chrome.com/extensions/contentSecurityPolicy

关于javascript - Chrome 扩展程序的 HTML/Javascript 不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482489/

相关文章:

javascript - 无法在我的 Mean-stack 应用程序中加载本地镜像

javascript - 如何更改 jQuery "easy pie chart"插件的配置参数?

javascript - 如何防止 Angular 8 中的事件冒泡?

javascript - 我正在创建一个社交媒体网站,我需要让用户动态发布

javascript - 按住鼠标按钮且光标不在视口(viewport)外时如何检测鼠标离开?

来自 Chrome 扩展的 ajax 已处理,但收到 responseText =""和 status=0

javascript - 从 MongoDB 中重复文档集合中的唯一文档获取值的总和

jquery - 如何在表格的两个 TD 之间创建滚动

javascript - 为什么我的非常简单的 Chrome 扩展程序在 Mac 上运行,但在 PC 上运行不正常?

google-chrome - 与 Spotify 一起启动WebAuthFlow 返回 "Authorization page could not be loaded"