• delphi中WEBBrowser网页html相互调用(一)


    1、基本操作
    1.1、激活

    var doc,url:Olevariant ;
    begin
    url:='about:blank' ;//或者一个有实际意义的url
    WebBrowser1.Navigate2(url);//这样就激活了!
    end;

    1.2、写HTML代码

    var doc:Olevariant ;
    s:string;
    begin
    doc:=WebBrowser1.Document;
    doc.clear;//清楚缘由内容,以便写新内容
    doc.write('<html>');
    //其它代码
    doc.write('</html>');
    doc.close;//这样就生效了!
    end;

    1.3、获得HTML文本

    var doc:Olevariant ;
    s:string;
    begin
    doc:=WebBrowser1.Document;
    s:=doc.documentElement.outerHTML;//s里就是HTML文本了
    //处理s就行了
    end;

    2、中级操作
    2.1、获得其中HTML元素的值

    var doc:olevariant;
    s:string;
    begin
    doc:=WebBrowser1.Document;
    s:=doc.all.btn.value;
    end;

    2.2、改写其中HTML元素的值

    var doc:olevariant;
    begin
    doc:=WebBrowser1.Document;
    doc.all.btn.value:='123123';
    end;

    3、高级操作
    3.1、触发其中HTML元素的事件

    var doc:olevariant;
    begin
    doc:=WebBrowser1.Document;
    doc.all.btn.onclick;
    end;

    3.2、让其中的元素执行webbrowser之外的delphi代码
    本来,这有很复杂的解决办法,但那部分属于ATL的知识比较难掌握,因此绕了一下:
    让那些需要执行delphi的HTML元素,调用一个函数叫做triggerExEvent,参数是HTML元素的名称,然后是若干参数。
    triggerExEvent是javascript函数,有不确定个参数,但第一个肯定是表示元素的名称。 triggerExEvent将参数组成字符串,然后前面冠以"#OnTriggerExEvent:",作为url,然后导航。
    在webbrowser的onNavigator2事件里,判断url中是否包含"#OnTriggerExEvent:",如果包含怎作如下处理:
    a、cancel这次导航;b、将"#OnTriggerExEvent:"之后的信息截取,作为参数传递给webbrowser的新增一个事件OnTriggerExEvent事件,其参数有两个:1、控件名称;2、一个字符串参数。
    这样,用户可以在OnTriggerExEvent事件里处理HTML的点击等事件了
    例如,我为webbrowser派生新类,叫做webbrowserEx,它有一个事件叫做OnTriggerExEvent
    有个js文件包含这样的函数:

    function triggerExEvent(cmpnt_id,event_nm,optionstr)
    {url='#triggerExEvent:id=';
    url=url+cmpnt_id+';eventnm='+event_nm;
    if(optionstr) url=url+';params=optionstr';
    location=url;}

    在HTML文本里可以这样写:

    <input type="button" name="Submit" value="按钮" onClick="triggerExEvent('Submit','click',null);">

    这样,点击网页里的按钮时,会触发delphi写的代码,这些代码根据传递过来的参数,再进行调用其它合适的事件,也可以让webbrowserEx自动寻找合适的事件来触发,只有寻找不到时才去找JS的方法。

  • 相关阅读:
    [Codeforces Round #498 (Div. 3)] -F. Xor-Paths (折半搜索)
    Best Reward [HDU
    [Educational Codeforces Round 72] A. Creating a Character (简单数学)
    [Codeforces Round #624 (Div. 3)] -E. Construct the Binary Tree (构造二叉树)
    [Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)] -D. Present(异或性质,按位拆分,双指针)
    [Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)] -D. Present(异或性质,按位拆分,树桩数组)
    [Educational Codeforces Round 83 ] E. Array Shrinking
    [AtCoder Beginner Contest 158]
    [CodeCraft-20 (Div. 2)]- E. Team Building (状压DP)
    HDU 3308 LCIS (线段树区间合并)
  • 原文地址:https://www.cnblogs.com/luwenbin/p/3516671.html
Copyright © 2020-2023  润新知