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

时间:2021-08-01 13:19:51

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

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

<块引用>

var currencySelectorLink = document.getElementById('switcher-info'); 货币选择器Link.click();

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

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

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

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

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

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

currencySelectorLink.href= '#' ;

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

1 个答案:

答案 0 :(得分:0)

{#for state in states} <li data-controller="home" data-home-states-value="{state.uf}" data-home-name-value="{state.name}" data-action="click->home#selectItem"> {state.name} </li> {/for} 代码所做的一切就是阻止在链接上进行跟踪。你可以做同样更漂亮的方式:

<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>