【问题标题】:javascript click function causes Content Security Policy errorjavascript点击功能导致内容安全策略错误
【发布时间】:2021-10-07 04:06:25
【问题描述】:

我的一个 chrome 扩展内容脚本正在对这样的元素执行点击功能

var currencySelectorLink = document.getElementById('switcher-info'); currencySelectorLink.click();

但是最后一行导致以下错误:

拒绝运行 JavaScript URL,因为它违反了以下内容安全策略指令:“script-src 'self'”。启用内联执行需要“unsafe-inline”关键字、哈希(“sha256-...”)或随机数(“nonce-...”)。请注意,哈希不适用于事件处理程序、样式属性和 javascript: 导航,除非存在“unsafe-hashes”关键字。

我现在已经花了几个小时试图解决这个问题,也许你们中的一些人会知道如何解决它。这个点击事件我绝对要触发,没办法了

编辑: 经过更多调查后,我发现它发生了,因为该链接具有带内联 javascript 的 href 属性:

<a class="switcher-info notranslate" href="javascript:void(0)" id="switcher-info"></a>

有人知道如何绕过它吗?如果我这样做:

currencySelectorLink.href= '#' ;

然后错误消失了,但它破坏了网站功能,并且此点击事件并非完全预期的行为

【问题讨论】:

  • 在 devtools 控制台中运行相同的程序,如果您看到错误,很可能它与您的扩展无关。否则,如果没有真正的MCVE,我认为无法回答这个问题,其中V 表示可验证,即问题应包含重现问题所需的所有信息。

标签: google-chrome-extension manifest content-security-policy chrome-extension-manifest-v3


【解决方案1】:

&lt;a href="javascript:void(0)" 代码所做的只是防止链接上的跟踪。你可以做同样的更漂亮的方式:

currencySelectorLink.href= '#' ;
currencySelectorLink.addEventListener("click", function(event) {
  event.preventDefault();  // Prevent default action (a following a link)
  }, false);

注意。由于您调用click(),您已经有了一些事件处理程序。您可以将event.preventDefault(); 插入其中,而不是添加第二个处理程序。并使用:

&lt;a class="switcher-info notranslate" href="#" id="switcher-info"&gt;&lt;/a&gt;

没有javascript:void(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2018-04-27
    • 2017-09-07
    • 2019-02-11
    • 1970-01-01
    • 2020-11-08
    • 2015-09-17
    相关资源
    最近更新 更多