`

Webbrowser技巧

阅读更多
htm中<script> var currID=123</script>     
程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.currID     
值得说明的是,变量可以是javascript定义的,也可以是vbscript定义的,如果Webbrowser1中找不到该变量,调用会触发一个异常事件,即变量currID不存在
2.执行网页中的函数     
tmp := 'currID = getNextID(currID)'+#13#10;
Form1.WebBrowser1.OleObject.Document.parentWindow.execScript(tmp,'JavaScript');    
调用函数的方法就是execScript接口,同样,如果函数不存在,或者运行错误也会触发脚本错误异常

3.设置网页背景     
背景图片 WebBrowser1.OleObject.Document.body.background     := 'http://seelearn.com/bg.gif
'        背景颜色 WebBrowser1.OleObject.Document.body.bgcolor     := '#eeeeee'

4.调用网页中已知对象     
src := WebBrowser1.OleObject.Document.getElementByID('img1').src      该方法其实就是javascript中的 getElementByID 

5.获取页面中所有的frame     
使用DHTML。
      frames:=wb.OleObject.document.frames;
      for i:=0 to frames.length do
      memo1.lines.Add(frames[i].document.body.innerHTML);

6.BorderStyle=bsNone后Webbrowser会被重新初始化     
这是一个让人很意外的一个问题,Delphi在窗口控件的控制方面做得非常好,很少出现这种BUG     
根据分析,出现这个现象有很多情况 改变FormStyle也会出现 ; 如果     webbrowser.parent    
由panel1改到panel2.也会导致webbrowser重新初始化。

7.直接向Webbrowser中写入html代码,不需要Navigate到实际存在的文件     
     var
     StrStream:TStringStream;
     SetNoteStr: string;      begin    SetNoteStr :='<body bgcolor=222222 align=center><br><p align=center><font size=+2 color=#FFFFFF>扬帆博客 http://wesohon.com</font></p>';
    SetNoteStr :=SetNoteStr+'<br><p align=center><font size=+2 color=#FFFFFF>点击左边按钮可查看对应图片</font></p>';
    StrStream:=TStringStream.Create(SetNoteStr);
    WebBrowser1.Navigate('about:blank');
    try
      StrStream.Position:=0;
      ( WebBrowser1.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));
    finally
      StrStream.Free;
    end;
8.前进,后退,刷新    
self.WebBrowser1.GoBack    
self.WebBrowser1.GoForward     
self.WebBrowser1.Refresh

9.捕捉NewWindow2事件,即新开窗口事件    
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
    var ppDisp: IDispatch; var Cancel: WordBool);
var
    NewWindow: TForm2;
begin
    //exit;
    NewWindow:= TForm2.Create(nil);
    NewWindow.Show;
    ppDisp:= NewWindow.Webbrowser1.DefaultDispatch;
end;    值得一题的是该方法不能获得新开窗口的URL,退一步的方法只能是等到在新的Webbrowser中触发BeforeNavigate2事件判断了

10.网页中存在iframe时判断页面是否下载结束      
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;const pDisp: IDispatch; var URL: OleVariant);
   begin    
   if WebBrowser1.Application = pDisp then showmessage('页面已全部下载完毕')end;
   说明一下,每个iframe下载完毕都会触发DocumentComplete事件,所以一个页面在真正下载完毕前可能被触发多次

11. 获取网页中图片//使用DOM模型,什么都能读下来   
   uses    MSHtml,    ActiveX;       
   var  
           html_doc:    IHTMLDocument2;  
           doc_all :    IHtmlElementCollection;  
           vI      :    IHtmlImgElement;  
   begin  
           html_doc    :=    WebBrowser1.Document    as    IHTMLDocument2;  
           doc_all     :=    html_doc.images;  
           for    I    :=    0    to    doc_all.length    -    1      do  
           begin  
                   vI  :=    doc_all.item(I,    EMPTYPARAM)    as    IHtmlImgElement;  
                   //读取vI.src  
                   Memo1.Lines.Add(vI.src);  
           end;  
   end;12. 下面函数获得ISomeControl接口var  
           html_doc:    IHTMLDocument2;  
           doc_all :    IHtmlElementCollection;  
           vI      :    IHtmlElement;  
           vD      :    IDispatch;  
   begin  
           html_doc    :=    WebBrowser1.Document    as    IHTMLDocument2;  
           doc_all     :=    html_doc.all;  
           for    I    :=    0    to    doc_all.length    -    1      do  
           begin  
                   vI  :=    doc_all.item(I,    EMPTYPARAM)    as    IHtmlElement;  
                   if    vI.tagName='OBJECT'    then  
                   begin  
                           //读取Classid  
                           Memo1.Lines.Add((vI    as    IHtmlObjectElement).classid);  
                           //读取包容的对象接口  
                           vD    :=    (vI    as      IHtmlObjectElement).object_;  
                           ...  
                   end;  
           end;  
   end;
分享到:
评论

相关推荐

    Vue2基础实例-实现移动端静态页面(CDN引入方式)

    Vue2基础实例-实现移动端静态页面(CDN引入方式)

    基于vb+access 实现的学籍管理系统毕业设计(论文+源代码)

    【作品名称】:基于vb+access 实现的学籍管理系统【毕业设计】(论文+源代码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 本系统主要完成对学生情况和学生成绩的管理,包括数据库中表的添加、修改、删除等。系统还可以完成对各类信息的浏览、查询、添加、删除、修改、报表等功能。 系统的核心是数据库中各个表联系,每一个表的修改都将联动的影响其它的表,当完成对数据的操作时系统会自动地完成数据库的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。 关键字:控件、窗体、数据库、vb6.0、access97。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    基于MATLAB汽车框定代码面板GUI(1).zip

    计算机网络期末复习

    软件项目开发,项目管理10条

    软件项目开发,项目管理10条

    三菱plc实例程序61个,机械手、拉丝机、压铸机、啤酒输送、喷泉控制、尿片包装机、模温机、硫化机、碾压机、磨床、泡沫机等等

    两种简单的彩灯闪烁程序.rar 两线控制机械手.rar 两轴伺服控制的PCB自动切边(PLC+ 人机界面)程式.rar 两道FX2N-4AD习题(有程序).rar 六头直径式拉丝机.rar 六层六站电梯.rar 冷却水泵节能循环运行1.rar 冷室压铸机FX PLC程序.zip 力恒锌合金压铸机.rar 啤酒输送无压力系统三菱程序.rar 喷泉控制设计.rar 喷涂.rar 喷涂生产线粉末喷涂控制程序.rar 喷灌控制器.rar 墨西哥纬创二期工程.rar 密码锁门梯形图.rar 尿片包装机.rar 平板硫化机FX2N-PLC加 F940人机.rar 木工机械数控载板锯.rar 某军区恒压供水程序.rar 某生产自动线.rar 某运料小车(cs).rar 某锻压机械厂的80吨冲床程序.rar 模拟量程序,自动跟踪.rar 模温机.rar 模糊控制算法的PLC程序模块.rar 泡沫机.rar 流水线控制.rar 淋膜复合机组.rar 煤矿皮带运输机电控系统.rar 煤质采样程序.rar 瑪斯蘭贰厂壹期.rar 硫化机.rar 碾压机.rar 磨床.rar 磨边机三菱FX程序+人机界面控制

    基于JAVA的高校竞赛和考级查询系统-源码+万字LW.zip

    本次开发的高校竞赛和考级查询系统实现了字典管理、公告管理、教务处管理员管理、竞赛管理、竞赛收藏管理、竞赛留言管理、竞赛报名管理、学院负责人管理、学生管理、指导老师管理、管理员管理等 今天向大家分享一个最新完成的高质量毕业设计项目作品 基于SSM的XXX管理系统 项目评分(最低0分,满分5分) 难度系数:3分 工作量:5分 创新点:3分 界面美化:5分 使用技术 前端: html/js/css/vue 后端:ssm 数据库:MySql 服务器:apache-tomcat 编译器:IntelliJ IDEA 项目管理工具:maven 项目包含内容 (包含毕设全套内容) 项目源码 论文 运行效果视频、部署参考教学视频

    R语言中模型选择与评估的全面实践

    在R语言中,模型选择和评估是一个涉及多个步骤的过程,包括数据预处理、模型训练、超参数调优、模型评估和结果可视化。通过使用caret、ROCR等包,我们可以构建、评估和优化各种机器学习模型。掌握这些技能对于数据科学家和机器学习工程师来说至关重要,它们是构建有效预测模型的基础。

    自定义按钮实现(带图片文字虚线实线边框切换)

    WPF+MVVM 自定义按钮实现(带图片文字虚线实线边框切换),案例给出两种状态变化控制,一种是两个按钮分开控制,通过按钮禁用边框变成虚线表示不可用状态,另一种时一个按钮控制状态变化,改变按钮文字描述和背景图片。详细描述见博客 https://blog.csdn.net/qq_21419015/article/details/143219764

    Logistic回归(分类)问题探讨与实践博文对应的数据和代码

    Logistic回归(分类)问题探讨与实践博文对应的数据和代码。

    为开发人员打造的低代码开发平台 Mybatis-plus关联查询,强大的无代码模型表单页面流程设计能力等全方位赋能

    用上Diboot,大多数SQL都不用写了,代码极大简化,让开发专注于业务;Diboot基础封装的内部实现,确保运行高效率高性能,帮你规避常见的坑。基于Devtools的代码生成能力,后端、前端、关联、复杂主子页面、移动端、非覆盖式更新代码、AI辅助命名... 全支持;零代码不能满足的复杂场景,基于生成后的代码快速扩展,无任何扩展局限性。模型设计、页面设计、表单设计、流程设计、数据大屏 等能力全支持,多数功能直接配;表单与流程解耦,流程挂载多表单,表单灵活复用。零/低/全代码之间顺畅融合,自由切换。多数常规功能零代码搭建即用;复杂功能支持集成自定义手写页面、支持生成前后端代码自由扩展; 为开发人员打造的低代码开发平台。Mybatis-plus关联查询,关联无SQL,性能高10倍,前后端代码本地可视化生成,flowable工作流,spring cloud微服务,强大的无代码模型表单页面流程设计能力等全方位赋能!

    百度域名动态解析DDns

    自动根据动态域名配置信息解析域名,类似花生壳动态域名解析功能

    跟岗实习提交材料.zip

    跟岗实习提交材料.zip

    Mqtt消息模拟程序,模拟发送MQTT数据

    Mqtt消息模拟程序,模拟发送MQTT数据

    TL-ER3220G V4.0升级软件20221207-3.0.4

    TL-ER3220G V4.0升级软件20221207_3.0.4

    【永磁电机】基于matlab四模块永磁轮毂电机的容错控制策略仿真【含Matlab源码 期】.zip

    CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    算法与数据结构-综合提升 C++版

    算法与数据结构-综合提升 C++版 资源列表: 00-0pening 01-Why-Algorithms 02-Sorting-Basic 03-Sorting-Advance 04-Heap 05-Binary-Search-Tree 06-Union-Find 07-Graph-Basics08-Minimum-Span-Trees 09-Shortest-Path 10-Ending

    红薯无印高清图提取.zip

    红薯无印高清图提取.zip

    22应统3 玛依拉 220110780519 作业2.ipynb

    22应统3 玛依拉 220110780519 作业2.ipynb

    5G NR GSCN计算SSB的NARFCN MATLAB实现

    本期给大家带来5G NR中已知GSCN如何计算对应的 SSB 绝对射频信道号NARFCN,根据gscn先计算出中心频率,再根据中心频率反推NARFCN,用MATLAB实现,参考3GPP 38.104,欢迎一起交流

    基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)

    基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕

Global site tag (gtag.js) - Google Analytics