作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试仅在访问者单击“接受”按钮时创建 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/
我是一名优秀的程序员,十分优秀!