是否可以通過JavaScript將HTML傳遞給瀏覽器並使用jQuery解析它,但是不加載外部資源? (腳本,圖像,閃存,任何東西)瀏覽器在不加載資源的情況下解析jQuery的HTML
如果這是我能做的最好的,我會用XML解析器來做,但如果可能的話,我想讓寬鬆的HTML。
它必須與Chrome,Firefox,最新的IE兼容。
是否可以通過JavaScript將HTML傳遞給瀏覽器並使用jQuery解析它,但是不加載外部資源? (腳本,圖像,閃存,任何東西)瀏覽器在不加載資源的情況下解析jQuery的HTML
如果這是我能做的最好的,我會用XML解析器來做,但如果可能的話,我想讓寬鬆的HTML。
它必須與Chrome,Firefox,最新的IE兼容。
var html = someHTML; //passed in html, maybe $('textarea#id').val();? I don't understand what you mean by 'passed in html'
var container = document.createElement('div');
container.innerHTML = html;
$(container).find('img,embed,head,script,style').remove();
//or
$(container).find('[src]').remove();
var target = someTarget; //place to put parsed html
$(container).appendTo($(target));
編輯
測試工作
removeExt = function(cleanMe) {
var toScrutinize = $(cleanMe).find('*'); //get ALL elements
$.each(toScrutinize, function() {
var attr = $(this)[0].attributes; //get all the attributes
var that = $(this);
$.each(attr, function(){
if ($(that).attr(this.nodeName).match(/^http/)) {//if the attribute value links externally
$(that).remove(); //...take it out
}
})
})
$('script').remove(); //also take out any inline scripts
}
var html = someHTML;
var container = document.createElement('div');
container.innerHTML = html;
removeExt($(container));
var target = someTarget;
$(container).appendTo($(target));
這將匹配SRC,HREF,鏈接,數據富,什麼...沒辦法從外部鏈接。 http和https都匹配。內聯腳本被殺死。如果它仍然是一個安全問題,那麼也許這應該做服務器端,或混淆你的JS。
有趣的解決方案,但不是特別有利於安全。對不起,看起來答案是「沒有黑名單就無法完成」。 – 2012-02-01 23:17:59
通過外部,你的意思是總是託管在域名以外的域名的腳本?或者你的意思是任何無法在單個HTML文件中描述的元素? – 2012-02-01 23:25:04
我不想在解析發生時執行任何網絡活動,並且我不希望任何腳本運行。 – 2012-02-01 23:32:58
我解決了這個問題..你可以適應這個替換任何標籤的src http://stackoverflow.com/questions/6671461/replace-img-elements-src-attribute-in-regex – samccone 2011-07-12 22:48:17
因爲我不控制源HTML,並有太多棘手的黑客攻擊,我不能接受正則表達式的答案。抱歉。另外,腳本不應該被執行,因爲他們可能決定自己加載外部資源。 – 2011-07-13 00:43:17