javascript - 如何在点击时执行脚本

标签 javascript jquery

我尝试仅在访问者单击“接受”按钮时创建 cookie,但无法使脚本在单击时执行。这是我的代码:

function myFunction(){
    var scripts = document.getElementsByTagName("script");
    for (s of scripts) {
        if (s.type == "text/plain") {
            s.setAttribute('type', 'text/javascript');
            eval(s);
        }
    }
}
<head>
    # Some other scripts and title

    <script type="text/plain">
        document.cookie = "username=John Doe";
        alert();
    </script>

</head>

<body>
    <button href="javascript:void(0);" onclick="myFunction();">
        Accept
    </button>
</body>

当我点击按钮时,我可以看到脚本的类型从text/plain更改为text/javascript,但我没有管理在此之后执行脚本,即使使用 eval() (检查应用程序的 cookie 后,不会创建新的 cookie,因此我假设它没有执行)。

我在 StackOverflow 上看到了一些其他解决方案,但它们涉及将我想要执行的脚本内容放入 myFunction() 中,但我不想这样做(如果可能的话)。

感谢您的帮助。

最佳答案

var scripts = document.getElementsByTagName("script");
for (s of scripts) {
    if (s.type == "text/plain") {
        //s.setAttribute('type', 'text/javascript');
        eval(s);
    }
}

eval(s) 在这里没有意义,s 不包含文本形式的 JavaScript 代码,它是对 DOM 元素的引用。

eval(s.innerText) 将评估脚本元素的内容。

(此时你也不需要修改它的类型,因为脚本元素本身不再参与执行,它只是提供“数据”。)

关于javascript - 如何在点击时执行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61251410/

相关文章:

javascript - 如何使用 jquery 获取 Laravel 中下拉菜单单击中 li 的值?

javascript - Chart js 总是在圆环图上显示标签

javascript - 是否有更有效的算法来展平数组?

javascript - 滚动 div 问题

javascript - 滚动时将标题/导航转换为导航图标

javascript - jQuery Ajax - 失败的资源或 Uncaught Error

javascript - $(this).attr ("href") 返回未定义

jquery - 在此导航中添加子类别下拉列表

javascript - 在 react-router v4 中获取路径参数

javascript - 为什么这是有效的代码以及我们如何调用它