本文目錄一覽:
如何讓動態插入的javascript腳本代碼跑起來
用XMLHttpRequest和window.execScript動態的執行a.js,這個方法的優點比較明顯,但效率可能有所下降,沒有測試,有興趣的朋友可以自己測試一下速度。
代碼如下: script language=”javascript”
function bar(u) {
var x=window.ActiveXObject?new ActiveXObject(“MSXML2.XMLHTTP”):new XMLHttpRequest();
x.open(“GET”,u,false);
x.send(null);
s=x.responseText;
try {window.execScript(s)}catch(ex){window.eval(s)};//Mozilla下window.eval大致與IE的window.execScript方法功能相同
}
bar(“a.js”);
foo();
/script但這個方法仍有缺點,也就是a.js腳本中的代碼有中文的情況,如何處理?那就要經常解碼了,而解碼恰恰是js的軟肋,如果運用VBs來解碼,那麼兼容也就沒有了。要看自己具體的應用了,我在neverModules里加載js包時用的就是window.execScript方法來解析代碼,這樣更可以配合js
namespace的應用
加上腳本解碼(用vbs來解碼):
script type=”text/javascript”
//![CDATA[
function bar(u) …{
var x=window.ActiveXObject?new ActiveXObject(“MSXML2.XMLHTTP”):new XMLHttpRequest();
x.open(“GET”,u,false);
x.send(null);
s=parseScript(x.responseText);
try …{window.execScript(s)}catch(ex)…{window.eval(s)};
}
function parseScript(jscode) …{
// — toCurrentCharset(), by aimingoo 解碼
window.execScript(”+
‘Function Asc2Unicode(n) ‘+
‘ Asc2Unicode = Chr(n) ‘+
‘End Function ‘+’Function SafeArray2Str(body) ‘+
‘ SafeArray2Str = CStr(body) ‘+
‘End Function’,’VBScript’);
var r1 = /%u(..)(..)/g, r2 = /%([8,9,A-F].)%(..)/g;
var toUnicode = function($0, $1, $2) …{return Asc2Unicode(parseInt($1+$2, 16))}
toCurrentCharset = function(body) …{
return unescape(escape(SafeArray2Str(body)).replace(r1, “%$2%$1”).replace(r2, toUnicode));
}; jscode=toCurrentCharset(jscode);
window.execScript(jscode, ‘JavaScript’); //IE有效,vbs解碼
return jscode;
}
bar(‘a.js’);
foo();
//]]
/script
如何用js動態寫入html代碼
所謂動態寫入方法就是源文件代碼中原來沒有內容或者需要重新改變此處的要顯示的文字或內容,需要用JavaScript代碼來實現。動態寫入是一種很常見常用的方法。
1、用innerHTML寫入html代碼:
div id=”abc”/div
scriptdocument.getElementById(“abc”).innerHTML=”要寫入的文字或內容”/script
2、appendChild() 方法:
ul id=”myList”liCoffee/liliTea/li/ul
button onclick=”myFunction()”點擊向列表添加項目/button
script
function myFunction(){
var node=document.createElement(“LI”);
var textnode=document.createTextNode(“Water”);
node.appendChild(textnode);
document.getElementById(“myList”).appendChild(node);
}
/script
Js注入檢測函數咋辦
答:首先要截獲檢測函數的動態代碼,動態執行js代碼有兩種方法,一是eval,二是function。
現在很多網站都上了各種前端反爬手段,無論手段如何,最重要的是要把包含反爬手段的前端javascript代碼加密隱藏起來,然後在運行時實時解密動態執行。
動態執行js代碼無非兩種方法,即eval和Function。那麼,不管網站加密代碼寫的多牛,我們只要將這兩個方法hook住,即可獲取到解密後的可執行js代碼。
注意,有些網站會檢測eval和Function這兩個方法是否原生,因此需要一些小花招來忽悠過去
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245397.html