javascript点击功能导致内容安全策略错误

问题描述 投票:0回答:2

我的 Chrome 扩展内容脚本之一正在对这样的元素执行单击功能

varcurrencySelectorLink = 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= '#' ;

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

google-chrome-extension manifest content-security-policy chrome-extension-manifest-v3
2个回答
1
投票

<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();
插入其中,而不是添加第二个处理程序。并使用:

<a class="switcher-info notranslate" href="#" id="switcher-info"></a>

没有

javascript:void(0)


0
投票

我正在处理完全相同的问题,即我有一个 chrome 扩展尝试调用

click
函数,但我得到了相同的错误。

您找到解决方案了吗?

© www.soinside.com 2019 - 2024. All rights reserved.