簡體   English   中英

如何在javascript中使用.html()將html作為文本插入?

[英]How to insert html as text using .html() in javascript?

在我的JavaScript應用中,我使用以下代碼插入用戶消息:

var displayMessages = function(response, onBottom) {
    var user = GLOBAL_DATA.user;

    var acc = '';
    for(var i=0; i<response.length; i+=1) {
        var obj = response[i];

        var acc_temp = "";
        acc_temp += '<div class="message ' + (obj['user_id']==user['id'] ? 'message-right' : 'message-left') + '">';
        acc_temp += '<div>' + Autolinker.link($(obj['message']).text()) + '</div>';
        if (obj['user_id']!=user['id']) {
            acc_temp += '<div class="message-details">' + obj['first_name'] + ' ' + obj['last_name'] + '</div>';
        }
        acc_temp += '<div class="message-details">' + obj['date_sent'] + '</div>';
        acc_temp += '</div>';

        acc = acc_temp + acc;
    }

    addMessage(acc, onBottom);
};

問題是,如果obj['message'] = "<script>alert(1);</script>"; 那么屏幕上顯示的是"alert(1);" 因為我使用.text() 如何插入帶有script標簽的字符串,使其看起來與頁面上的樣子完全一樣? 我不希望它被執行。

謝謝

我使用這些輔助功能。

function htmlEncode(value){
  return $('<div/>').text(value).html();
}
function htmlDecode(value){
  return $('<div/>').html(value).text();
}

如果您不確定其他變量沒有任何可執行代碼,我也將對其進行轉義。

我用這個解決了:

function escapeHTML(str) {
    return $("<p></p>").text(str).html();
}

我認為您需要將對象包裝在虛擬標簽中,然后才能從中檢索完整的html。

不過,您會遇到問題,因為您使用的是腳本標記,該標記將被評估。

obj['message'] = "<script>alert(1);</script>";
>
$(obj['message']).text();
> "alert(1);"
$(obj['message']).html();
> "alert(1);"
$(obj['message']).wrapAll('<div>').text();
// alerts with 1
> "alert(1);"

不使用腳本標簽將起作用。

obj['message'] = "<span>alert(1);</span>";
>
$(obj['message']).wrapAll('<div>').text();
> "<span>alert(1);</span>"

暫無
暫無

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

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