动态执行 js脚本程序 有代码 请高手留步 ( 积分: 100 )

S

sadnui

Unregistered / Unconfirmed
GUEST, unregistred user!
<div id=&quot;div&quot;>加载中...</div>
<script type=&quot;text/javascript&quot; language=&quot;javascript&quot;>
var newStr = &quot;<script src=/&quot;http://s33.cnzz.com/stat.php?id=109006&amp;web_id=108995&amp;show=pic/&quot; language=/&quot;JavaScript/&quot; charset=/&quot;gb2312/&quot;><//script>&quot;;
document.getElementById(&quot;div&quot;).write(newStr);
</script>
//========================================================
研究一晚上了 没一点头绪 网上说的是很难实现

我的思路是这样的.
定义一个 字符川 newStr
赋予<script src=/&quot;http://s33.cnzz.com/stat.php?id=109006&amp;web_id=108995&amp;show=pic/&quot; language=/&quot;JavaScript/&quot; charset=/&quot;gb2312/&quot;><//script> 值
然后动态写入document.getElementById(&quot;div&quot;).write(newStr);
但是 javascript 不执行
有哪为高手有办法 请赐教`
 
Q

qqjm

Unregistered / Unconfirmed
GUEST, unregistred user!
document.getElementById(&quot;div&quot;).innerHTML=newStr;
 
S

sadnui

Unregistered / Unconfirmed
GUEST, unregistred user!
经过测试. 代码运行 但是没有执行
统计报表没有出来 怎么让这个javascript运行?
 

木桩

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么会很难呢,用WebBrowser执行代码很容易的。转到空页面是为了测试方便,其实也可以是你需要添加js脚本的页面
procedure TForm1.Button2Click(Sender: TObject);
var
HTMLDocument: IHTMLDocument2;
begin
WebBrowser1.Navigate('about:blank'); //转到一个空页面

While HTMLDocument=nil do
begin
Application.ProcessMessages; //等待转向完成
HTMLDocument := WebBrowser1.Document as IHTMLDocument2; //成功后,HTMLDocument<>nil
end;

try
(HTMLDocument.get_Script() as IHTMLWindow2).execScript
(newStr, 'JavaScript'); //newStr里就是你要执行的js脚本,不要加<script>,比如 newStr:='var msg=&quot;这是javascript弹出的提示。&quot;; alert(msg);'
except
//MessageBox(Handle,'您所执行的脚本存在错误!','错误',MB_OK+MB_ICONERROR);
end;

end;
 

木桩

Unregistered / Unconfirmed
GUEST, unregistred user!
直接点的办法是写入你说的那串
<script src=/&quot;http://s33.cnzz.com/stat.php?id=109006&amp;web_id=108995&amp;show=pic/&quot; language=/&quot;JavaScript/&quot; charset=/&quot;gb2312/&quot;><//script>
做法是将try中的(HTMLDocument.get_Script() as IHTMLWindow2).execScript改成:
(先添加var vv: Variant;并且 Uses ActiveX)
vv:=VarArrayCreate([0, 0], varVariant);
vv[0]:=newStr;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray)); //将HTML代码写入目标页面
HTMLDocument.Close;
这个方法比较通用,但是并不保险。因为页面没有载入完成的情况下,很可能写入的代码不能正常执行。
 

我爱PASCAL

Unregistered / Unconfirmed
GUEST, unregistred user!
木桩先生,你的隐进程的代码我试过,注入记事本已写入内存成功,但是记事本出错退出了。
 

木桩

Unregistered / Unconfirmed
GUEST, unregistred user!
那个无模DLL注射吗?问题确实很大的,但小心点也能正常运行。DLL的基址要固定,而且不能有DLLMain...
你留下EMail吧,我把完整的给你发一份。
 
S

sadnui

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢各位的热心帮助 ..
现在新年~ 先祝福各位新年快乐
待改天我测试成功代码在结帖
 
S

sadnui

Unregistered / Unconfirmed
GUEST, unregistred user!
今天调试了一下
虽然不是html脚本里面控制的 但是给了思路 通过其他方法测试成功
谢谢木桩同志
 
顶部