簡體   English   中英

你如何禁用<script> elements using JavaScript

[英]How do you disable <script> elements using JavaScript

我想禁用<script>標簽。 這是我的代碼,但它不起作用。

document.getElementsByTagName('script').disabled = true;

實際上,可以通過更改“type”屬性來禁用執行:

<script type="text/javascript">
    alert("I will alert you");
</script>

<script type="application/json">
    alert("And I will keep silent");
</script>

<script>
    alert("I will alert too");
</script>

http://jsfiddle.net/r6c0x0sc/

無法完成...腳本標簽在 DOM 渲染器渲染后立即評估,因此在 wards 之后處理它不會做太多事情。

您可以禁用腳本元素。 有幾種方法:

您可以指定與其他腳本類型不同的腳本類型 這是對我有用的一個:

//loop through all script tags on page
$('script').each(function(){
    var scripthtml = $(this).html();
    $(this).replaceWith('<script type="text/gzip">' + scripthtml + '</script>');
});

所有官方腳本類型都可以在這里找到: iana.org

第二種方法只是一個簡單的 if 語句

//loop through all script tags on page
$('script').each(function(){
    var scripthtml = $(this).html();
    $(this).replaceWith('<script>if (1==0){' + scripthtml + '}</script>');
});

if 語句將始終為 false,因此腳本標記內的任何內容都不會執行。 但是,腳本標記內的所有函數() 都將有效。

繼承人的javascript 相當於replaceWith:

//get script and html
var yourscripttag = document.getElementById('yourscripttagID');
var scripthtml = 'if (1==0){' + yourscripttag.innerHTML + '}';
//remove script
yourscripttag.remove();
//create new script element
var newscript=document.createElement('script');
newscript.type='text/javascript';
//insert html in new script tag
newscript.appendChild(document.createTextNode(scripthtml));
//insert new script tag into head
document.getElementsByTagName('head').item(0).appendChild(newscript);

據我了解,您正在從數據庫中獲取一些 HTML 代碼並將其添加到頁面中。 如果是這樣,您可以編寫一個服務器端函數,該函數將使用簡單的正則表達式在腳本周圍添加 HTML 注釋,然后用戶保存更改,您將需要刪除注釋。

如果您在將 HTML 字符串添加到 Dom 之前想要添加它,您也可以在 Javascript 中執行此操作。

刪除 DOM 節點上的所有事件將阻止大部分 JavaScript 執行(此處針對document ):

for (key in getEventListeners(document)) {
  getEventListeners(document)[key].forEach(function(c) {
    c.remove()
  })   
}

你可以破解它。 使用另一個腳本來做一個......

node.parentNode.replaceChild(
  document.createComment(node.outerHTML.slice(1,-1)
    .replace(/--/g, '\\-\\-')), node);

其中 node 是您的腳本節點/元素。 替換雙破折號是為了防止瀏覽器抱怨評論標簽不合規。

然后,如果您想啟用它,只需執行反向 comment.replace 並用 < 和 > 括起來。 但是您可能需要跟蹤修改后的腳本節點,因為在它成為注釋之后,它的查詢能力就變差了。

抱歉,您無法禁用<script>元素。

內聯 Java 存在安全風險。 但這可以通過一個簡單的解決方案來緩解。

只需將 的任何實例替換為 <script&rt; 之類的東西; 因此它不會呈現為標簽,而是會以 HTML 格式輸出,看起來就像是標簽一樣。

input.replace("<script>", "&lt;script&gt;")
     .replace("</script>", "&lt;&#47;script&gt;")

如果您的用例類似於:

  1. 如果要禁用內聯腳本,例如

    <script> alert("你好"); </腳本>

  2. 如果您不想從顯示中刪除內容(腳本標記數據)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM