-1

我有一个与 Tawk.to 聊天的网站。我正在编写我的内容安全策略,我需要避免使用所有内联脚本。

代码如下所示:

HTML

<a class="message_button anchor" id="message_button" href="javascript:void(Tawk_API.toggle())" title="Üzenjen nekünk!"><img
            alt="Üzenet küldés gomb ikonja" src="img/message_icon.svg" /></a>

JS

var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
    (function(){
        var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
        s1.async=true;
        s1.src='https://embed.tawk.to/5fb64551920fc91564c886eb/default';
        s1.setAttribute('crossorigin','*');
        s0.parentNode.insertBefore(s1,s0);
    })();

所以问题出在 javascript:void(Tawk_API.toggle());

$("#message_button").click(function() {
            $(this).attr("href", "javascript:void(Tawk_API.toggle())");
        });

但它有点一样。我尝试使用 click 和 Tawk_API.toggle() 添加 eventListener 但控制台说 Tawk_API.toggle() 不是函数。

有什么建议吗?javascript:void() 的任何替代方案?

提前感谢您的回答!

4

1 回答 1

0

我尝试使用 click 和 Tawk_API.toggle() 添加 eventListener 但控制台说 Tawk_API.toggle() 不是函数。

这是因为您在加载 API 时调用了 Tawk_API。它需要使用Tawk_API.onLoad事件,请参阅Tawk 文档中的示例:

Tawk_API.onLoad = function(){
    Tawk_API.toggle();
};

你必须做这样的事情:

Tawk_API.onLoad = function(){
    $("#message_button").click(function() {
        Tawk_API.toggle();
    });
};

PS:$(this).attr("href", "javascript:void(Tawk_API.toggle())");构造是一个 javascript 导航,所以它是一个内联脚本。

于 2021-01-15T23:54:15.390 回答