相关疑难解决方法(0)

无法读取null的属性'addEventListener'

我必须为项目使用vanilla JavaScript.我有一些功能,其中一个是打开菜单的按钮.它适用于目标ID存在的页面,但会导致id不存在的页面出错.在那些函数找不到id的页面上,我收到一个"无法读取属性'addEventListener'的null"错误,我的其他函数都没有工作.

下面是打开菜单的按钮的代码.

function swapper() {
toggleClass(document.getElementById('overlay'), 'open');
}

var el = document.getElementById('overlayBtn');
el.addEventListener('click', swapper, false);

var text = document.getElementById('overlayBtn');
text.onclick = function(){
this.innerHTML = (this.innerHTML === "Menu") ? "Close" : "Menu";
return false;
};
Run Code Online (Sandbox Code Playgroud)

我该如何处理?我可能需要将所有代码包装在另一个函数中或使用if/else语句,以便它只搜索特定页面上的id,但不确定.

javascript function getelementbyid addeventlistener

80
推荐指数
13
解决办法
38万
查看次数

Chrome扩展程序 - 内容安全策略 - 执行内联代码

我在chrome扩展中使用外部JavaScript库.我有内联执行,所以我得到了一些错误

(我在控制台上得到的错误)

拒绝执行JavaScript URL,因为它违反了以下内容安全策略指令:"script-src'self'chrome-extension://".要么是'unsafe-inline'关键字,哈希('sha256 -...'),要么是nonce('nonce -...')来启用内联执行.

错误消息清楚地表明有可能解决方法.

Chrome内容安全政策说不可能.许多相关问题引用了此链接.

博客这位博主说这是可能的,但可能这只适用于较旧的Chrome扩展程序.

任何可能的工作?

PS:不想/不能改变我正在使用的整个库.

编辑:如何使用哈希或随机数启用内联执行.

google-chrome google-chrome-extension content-security-policy

18
推荐指数
4
解决办法
2万
查看次数

Angular 给出“拒绝执行内联事件处理程序”错误

我创建了一个角度应用程序。这在浏览器中给出了以下错误

在此输入图像描述

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. Note that hashes do not apply to event handlers, style attributes and javascript: navigations unless the 'unsafe-hashes' keyword is present.
Run Code Online (Sandbox Code Playgroud)

原因是 Angular 在 index.html 中注入了以下内容

<link rel="stylesheet" href="styles.css" media="print" onload="this.media='all'">
Run Code Online (Sandbox Code Playgroud)

就是那个onload="this.media='all'"

一种解决方案是设置"optimization"为 false,在这种情况下 Angular 不会注入此代码。但这听起来并不是最好的解决方案。有什么建议如何做到这一点?

另一种解决方案(我认为比前一个解决方案好一点)是创建一个包装器组件,其中包含styles.scss. 就我而言,为了使其工作,我还需要将该encapsultaion包装器组件的设置为ViewEncapsulation.None

content-security-policy angular

15
推荐指数
2
解决办法
7913
查看次数

内容安全策略“拒绝执行内联事件处理程序”错误

我试图通过设置 Content-Security-Policy 标头来减轻 XSS 攻击,但 Chrome 不断抛出错误:

拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“script-src 'self' 'nonce-Njg3MGUxNzkyMjViNDZkN2I3YTM3MDAzY2M0MjUxZGEzZmFhNDU0OGZjNDExMWU5OTVmMmMwMTg4OQ3ZmY.” 启用内联执行需要“unsafe-inline”关键字、散列(“sha256-...”)或随机数(“nonce-...”)。

我尝试设置 nonce,<script nonce="Njg3MGUxNzkyMjViNDZkN2I3YTM3MDAzY2M0MjUxZGEzZmFhNDU0OGZjNDExMWU5OTVmMmMwMTg4NTA3ZmY4OQ==" href="main.js"></script>但它不起作用。

这是我的Content-Security-Policy标题:

default-src 'none'; 
script-src 'self' 'nonce-NjJjN2E5YjA0ZDJhNDlhZjlhMDFmZjQzMjE4YzhmMTAzOWNjZjVjMGZjNDIxMWU5YWIyNGMwMTg4NTA3ZmY4OQ=='; 
connect-src 'self' https://vimeo.com; 
img-src 'self'; 
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; 
font-src 'self' https://fonts.gstatic.com; 
media-src 'self' http://player.vimeo.com; 
frame-src 'self' http://player.vimeo.com;
Run Code Online (Sandbox Code Playgroud)

我不喜欢设置script-srcas unsafe-inline,因为它使 Content-Security-Policy 无效

javascript http-headers content-security-policy

7
推荐指数
2
解决办法
1万
查看次数

如何解决:“拒绝运行 JavaScript URL,因为它违反了以下内容安全策略...”

有人知道为什么我总是收到此消息吗?拒绝运行 JavaScript URL,因为它违反了以下内容安全策略指令:“default-src 'self'”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-...”)或随机数(“nonce-...”)。另请注意,“script-src”未明确设置,因此“default-src”用作后备。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width">
        <title>Title</title>
        <script type="text/javascript">
                function checkoutForm() {
                    var inputValue = document.querySelectorAll('.form-control')[0].value;
                    alert('Your input value: ' + inputValue);
                    window.open('/search/' + inputValue);
                }
        </script>
    </head>
    <body>
        <form class="navbar-search navbar-search-dark form-inline mr-3 d-none d-md-flex ml-lg-auto" method="get"
        action="javascript:checkoutForm()">
            <div class="form-group mb-0">
                <div class="input-group input-group-alternative">
                    <div class="input-group-prepend">
                        <span class="input-group-text"><i class="fas fa-search"></i></span>
                    </div>
                    <input class="form-control" placeholder="Search" type="search" value>
                </div>
            </div>
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

html javascript

6
推荐指数
2
解决办法
2万
查看次数