【发布时间】:2017-05-12 00:18:14
【问题描述】:
编辑:如果有另一种使用 javascript 禁用 javascript 的方法 - 我全神贯注。
我正在尝试通过“注入”一个 javascript 来禁用 javascript
<meta http-equiv="Content-Security-Policy" content="script-src 'none' ">
进入元素。根据 Firefox 开发工具 -> 检查器,该元素已添加,但被忽略。为什么,以及如何让浏览器“注意到”它?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!--
yes, this works, but I want to do this dynamically
<meta http-equiv="Content-Security-Policy" content="script-src 'none' ">
-->
</head>
<body>
Just some javascript for tests, I hoped this will stop working,
when I'll call the disableJavaScript() function below. But it
doesn't stop
<script>
var x = 0;
setInterval(function(){
console.log(x++);
}
,1000);
</script>
Inserting the meta element:
<script>
function disableJavaScript(){
var newMetaNode = document.createElement("meta");
newMetaNode.setAttribute('http-equiv','Content-Security-Policy');
newMetaNode.setAttribute('content',"script-src 'none'");
var headElem = document.getElementsByTagName('head')[0];
headElem.appendChild(newMetaNode);
}
//calling the function after 3 seconds:
setTimeout(function(){
disableJavaScript();
},3000)
</script>
</body>
</html>
【问题讨论】:
-
用例是什么……?为什么要禁用 Javascript?为什么不能静态添加meta header?
-
使用 setTimeout() 的阻塞版本:stackoverflow.com/a/39914235/2104879
-
抛出错误会停止当前进程,但仍然不会停止
setTimeout、setInterval和 ajax 请求。 -
@mertyildiran 不。不。宁。如果您有一个阻塞 anything,整个浏览器 UI 将无响应。此外,这不是“阻塞 setTimeout”。
-
用户不能通过打开标签页上的浏览器开发工具并选择禁用 JavaScript 来禁用每个标签页的 JavaScript 吗?
标签: javascript dom content-security-policy