browser 订阅
Browser
信息
操作系统
未知
开发语言
开源协议
未知
Browser
jQuery Browser Plugin lets you extend browser detection capabilities and implements CSS browser selectors in jQuery. jQuery is a lightweight JavaScript library that emphasizes interaction between JavaScript and HTML, allowing you to easily include many components that enrich and benefit the developer's coding experience.
收起全文
精华内容
参与话题
问答
  • Browser 架构

    2015-03-17 16:58:30
    公司产品的一个架构,这个架构是外国总部那边就设计好的,在这边唯一的一次比较大改动是一个牛人引入了HistoryPart结合ViewPager实现了滑动的前进后退。 ProxyBrowserView 在被构造的时候会被传入BrowserManager, ...
    公司产品的一个架构,这个架构是外国总部那边就设计好的,在这边唯一的一次比较大改动是一个牛人引入了HistoryPart结合ViewPager实现了滑动的前进后退。
    <1> ProxyBrowserView 在被构造的时候会被传入BrowserManager<既是C 也是 一个 ViewPager>, 一个 ProxiedBrowserView,以及一个
    HistoryPart, 如果没有给HistoryPart,那么会new 一个 HistoryPart并且 将此HistoryPart hold的 BrowserView设为此proxiedBrowserView, ProxyBrowserView会维护一个HistoryPart List,在构造时就将传入的HistoryPart加入到维护的HistoryPartList中,有一个commitHistoryPart 会添加输入的HistoryPart到List中, 在animatingToHistoryPart()或者 BrowserManager这个ViewPager的
    某个Page被select时,会调用。
    ProxyBrowserView某种意义上是BrowserView最外层的接口,
    在一个ProxyBrowserView中,因为有一个HistoryPart的list,而每个HistoryPart都对应一个ProxiedBrowserView,那么可以认为
    ProxyBrowserView代表了一群ProxiedBrowserView,但是作为一个浏览器,当然任何时候只能有一个proxiedBrowserView可以被显示或者说
    作为当前的BrowserView,那么这个ProxiedBrowserView选哪个,以及外界有操作引起ProxiedBrowserView变化,这些逻辑都在ProxyBrowser
    View中,ProxyBrowserView为里面的一群ProxiedBrowserView提供了对外被操作和操作的接口,类似于一个中间层, 而因为代表 V 的
    BrowserManager也被传入到了此ProxyBrowserView中,因此 ProxyBrowserView可以监视V的变化<ViewPager的PagerAdapter> 和 对 V 进行
    操作<ViewPager显示某个ProxiedBrowserView>。
    这种模式其实说白了就是封装 + 代理模式, 外边的实体 要交互的 对象 只是一个 BrowserView, 至于这个BrowserView当前倒是哪个是什么,不care,因此就有了ProxyBrowserView 代理了 一群被代理 的 ProxiedBrowserView 的 交互。

    <2>TabImpl里面也包含了一堆的proxiedBrowserView<纯粹从UI概念上说,因为用户从一个Tab切换到另外一个Tab,当前Tab的所有Webview都会被从ViewPager中remove,重新add 新的Tab的所有HistoryPart里的ProxiedBrowserView>, TabImpl直接和ProxyBrowserView有关联, 在TabImpl内部有一个BrowserViewProxy,里面就有一个ProxyBrowserView的引用,并且还有一个get方法返回里面的ProxyBrowserView引用,如果一个TabImpl里的引用指向的是null,那么会调用browserFragment<TabManager>的createBrowserView()<最后会以BrowserManager作为参数构造一个实例返回>。
    TabImpl是为了做Tab切换而专门加的一个类,而TabImpl还对外开放了一个接口来返回其代表的ProxyBrowserView,这样等于像Tab又封装了一下ProxyBrowerView。 因为BroserFragment本身就是一个TabManager,那么操作的直接实体应该是Tab<内部会维护一个Tab的List>。

    <3>HistoryPart顾名思义是为了使ProxiedBrowserView能够被以Nav History形式组织起来而对ProxiedBrowserView进行的再封装,
    为此,HistoryPart implements了ProxiedBrowserView内部的Delegate接口,意思就是ProxiedBrowserView的一部分逻辑功能被放在History中实现了,所以才是ProxiedBrowserView的Delegate。而HistoryPart中也保存一个指向ProxyBrowserView的引用,已得知当前proxy。
    当然的也会维护一个指向ProxiedBrowserView的引用,并且会把自己作为Delegate设置给ProxiedBrowserView

    <4>HistoryPart之间的切换也是在ProxyBrowserView中提供的,如果当前ProxyBrowserView所属的Tab是active的,就是当前展示给用户的,
    那么会显式的进行ViewPager的setCurrentItem来实现视觉上的从一个HistoryPart的View到另外一个HistoryPart的View的变化,
    而如果当前Tab不是active的,那么就不需要在视觉上进行切换<因为当前该Tab的所有HistoryPart的view都不在该Viewpager中>,之需要将该Tab对应的内存中的信息修改一下,会将此HistoryPart加入到ProxyBrowserView所维护的HistoryPartList中,并且会将其currentHistoryPart设为当前切换到的HistoryPart去, 一个是视觉上的切换,一个是后台数据上的切换。
    展开全文
  • Browser

    2015-12-29 22:54:00
    浏览器中关于事件的那点事儿 作者: 顽Shi发布时间: 2014-02-01 20:22阅读: 7830 次推荐: 25 原文链接 [收藏] 摘要:事件在Web前端领域有很重要的地位,很多重要的知识点都与事件有关。本文旨在对常用的事件相关...

    浏览器中关于事件的那点事儿

    作者: 顽Shi  发布时间: 2014-02-01 20:22  阅读: 7830 次  推荐: 25   原文链接   [收藏]  
    摘要:事件在Web前端领域有很重要的地位,很多重要的知识点都与事件有关。本文旨在对常用的事件相关知识做一个汇总和记录。

      在前端中,有一个很重要的概念就是事件。我对于事件的理解就是使用者对浏览器进行的一个动作,或者说一个操作。

      本文会介绍很多与事件有关的东西,虽然我的出发点有那么点一网打尽的意思m不过也难以盖全,所以就把最常用,最基本也相对重要的内容拿出来记录一下。

      Javascript绑定事件的方式

      传统的事件绑定

      因为各种历史原因,事件的绑定在不同的浏览器总是有不同的写法,当然现在可能大多数人都已经习惯于jQuery的事件绑定,而不清楚javascript的原生事件绑定是什么样子。

      非常传统的事件的绑定方式,是在一个元素上直接绑定方法,element.onclick = function(e){}

    <body> 
          <input type="button" id="bt" name="bt button" value="this is a button"> 
          <script> 
            var bt = document.getElementById("bt"); 
            bt.onclick = function(e){ 
              alert("this is a alert"); 
              alert(e.currentTarget.name); 
            } 
          </script> 
    </body>     

      这是传统的事件绑定,它非常简单而且稳定,适应不同浏览器。e表示事件,this指向当前元素。但是这样的绑定只会在事件冒泡中运行,捕获不行。一个元素一次只能绑定一个事件函数。

      W3C方式的事件绑定

      W3C中推荐使用的事件绑定是用addEventListener()函数,element.addEventListener('click',function(e){...},false),上代码:

    <body> 
          <input type="button" id="bt" name="bt button" value="this is a button"> 
          <script> 
            var bt = document.getElementById("bt"); 
            bt.addEventListener('click',function(e){ 
              alert("this is a alert"); 
              alert(e.currentTarget.name); 
            },false); 
          </script> 
    </body> 

      如此的效果和之前的传统绑定方式是一样的,这种绑定同时支持捕获和冒泡,addEventListener()函数最后的参数表达了事件处理的 阶段——false(冒泡),true(捕获)。这种方式最重要的好处就是对同一元素的同一个类型事件做绑定不会覆盖,会全部生效。比如对上面代码bt元 素在进行一次click的绑定,那么两次绑定的事件处理函数都会执行,按照代码书写顺序。

      但是IE浏览器不支持addEventListener()函数,只能在IE9以上(包括IE9)可以使用,IE浏览器相应的要使用attachEvent()函数代替。

      IE下的事件绑定

      IE下事件绑定的函数是attachEvent,它支持全系列的IE,但是如果你在Chrome等其他内核浏览器中使用这个函数去绑定事件,浏览器会报错的。

    <body> 
          <input type="button" id="bt" name="bt button" value="this is a button"> 
          <script> 
            var name = "world"; 
            var bt = document.getElementById("bt"); 
            bt.attachEvent('onclick',function(){ 
              alert("hello "+ this.name); 
            }); 
          </script> 
    </body> 

      attachEvent()函数支持事件捕获的冒泡阶段,同时它不会覆盖事件的绑定。但是一个缺点就是它处理函数中的this指向的是全局的window,所以上面代码弹出的结果会是"hello world"。

      冒泡和捕获

      上面的绑定事件中提到了冒泡和捕获阶段的概念,这两个概念对于理解事件是很重要的,对于它们的理解还要涉及到DOM(文档对象模型)和事件流的概念。事件流就是一个事件对象沿着特定数据结构传播的这么一个过程。

      所谓的事件对象就是Event,当一个元素上绑定的事件被触发时会产生一个事件对象,从一切皆对象的观点看这是很符合逻辑的。冒泡和捕获讲的就是事件流在DOM中两种不同的传播方式。对于冒泡和捕获的理解,我们还是从一个小的示例来看。

    <body> 
          <div id="bt1" style="width:300px;height:300px;border:1px solid red" name="divbt1"> 
          <div id="bt2" style="width:100px;height:100px;border:1px solid red" name="divbt2"></div> 
          </div> 
          <script> 
            var bt1 = document.getElementById("bt1"); 
            bt1.onclick = function(e){ 
              alert("bt1"); 
            } 
            var bt2 = document.getElementById("bt2"); 
            bt2.onclick = function(e){ 
              alert("bt2"); 
            } 
          </script> 
    </body>

      这里我们使用最简单的,最原始的事件绑定方式。2个div嵌套并且绑定有弹窗事件,那么当我们点击里面的div的时候,两个div的点击事件都会被触发这个是没有疑问的,那么它们的处理函数谁先被执行?

      这里用IE8/9/10和Chrome浏览器同时实验,结果都是先弹出bt2,然后弹出bt1,也就是里面小div的事件先被处理了。我们来思 考一下这是什么样的一个顺序,从DOM的结构上看,应该是这样的body > bt1 > bt2。我们把这个结构竖过来,bt2在整个结构的最下面,body在最上面。想象一下,当点击发生时产生一个泡泡(也就是事件对象),然后这个泡泡慢 慢,向上浮,首先路过bt2,然后路过bt1,在路过它们时依次执行事件函数,这就是冒泡型事件。

      与之相反的就是捕获型事件,它的事件流传播的顺序正好与冒泡型事件完全相反。也就是bt1上的事件先触发,然后传递到bt2。捕获是由表及里,冒泡是由内之外。

      那么现在回忆一下之前的W3C标准中那个addEventListener()函数,它里面最后一个参数false代表冒泡,true代表捕 获,这是什么意思呢?因为W3C作为一个标准,它选择了一个相对折中的方案去处理事件,也就是任何在W3C事件模型中发生的事件都先进入捕获阶段,然后在 进入冒泡阶段,保证一个事件会经历这两个阶段,以适应IE和其他非IE浏览器,这样使用者可以根据需求选择将事件注册到哪一个阶段。

      现在再来看用addEventListener()函数进行事件绑定的结果:

    <body> 
             <div id="bt1" style="width:300px;height:300px;border:1px solid red" name="divbt1"> 
             <div id="bt2" style="width:100px;height:100px;border:1px solid red" name="divbt2"></div> 
             </div> 
             <script> 
               var bt1 = document.getElementById("bt1"); 
                bt1.addEventListener('click',function(e){ 
                  alert("bt1"); 
                },false); 
                var bt2 = document.getElementById("bt2"); 
                bt2.addEventListener('click',function(e){ 
                  alert("bt2"); 
                },false);       
              </script> 
    </body> 

      这里2个div的事件绑定类型一共有4个可能的组合:2个false;2个true;1个false,1个true;1个true,1个false。这里分别试验下吧,记住按照W3C标准,捕获阶段会在冒泡之前。

      jQuery绑定事件的方式

      上面我们记录了关于javascript原生的事件绑定的一些写法,这里我们在介绍一下通过jQuery进行事件绑定的方式。首先来夸一夸 jQuery的好,通过jQuery绑定让我们省去了考虑浏览器兼容和事件流程序的相关细节内容。jQuery中对于事件的绑定称为委托,这是一个很好的 定义,所谓委托,顾名思义就是自己不去做,我让别人帮我做这个事。jQuery就是这么做的,让我们详细了解下。

      .bind()

      我们直接看代码,bind()函数使用很简单。

    <body> 
          <div id="div1" style="width:300px;height:300px;border:1px solid red" name="divbt1"> 
          <script> 
            $("#div1").bind('click',function(e){ 
              alert("div1 " + e.currentTarget.name); 
            });   
          </script>  
    </body> 

      代码在IE8, IE11, Chrome运行都没有问题,我们简单翻译一下就是首先找到id为div1的div对象,然后给这个对象绑定一个 click事件。现在来分析一下bind(),首先,如果用它绑定事件要有一个寻找jQuery对象的过程;其次,如果要为大量的元素绑定事件那么要寻找 大量的对象不说,每一个对象还要占用内存来存储相应的处理函数。并且bind()只能为当前已存在的DOM节点绑定事件,如果节点还没有产生bind是没 有办法的。

      所以说bind()推荐在使用比较简单的情况中,绑定不多的节点并且没有新节点产生的情况,如果比较复杂就推荐使用delegate()。

      .delegate()

      在jQuery中还有一个live()函数也能处理类似的问题,但是不如delegate()好用,所以这里就不介绍了。delegate()是为了突破单一bind()方法的局限性,实现事件的委托。我们先看代码来理解:

    <body>
      <div id="div1" style="width:300px;height:300px;border:1px solid red" name="divbt1">
        <div id="div2" style="width:100px;height:100px;border:1px solid red" name="divbt2"></div>
      </div>
      <script>
        $("body").delegate('#div1','click',function(e){
          alert("div1");
        });
        $("body").delegate('#div2','click',function(e){
          alert("div2");
        });    
      </script>
    </body>

      解 读一下delegate()函数,我们寻找到body标签的对象并调用delegate(),这是把事件的执行委托给body。也就是监听整个DOM树, 当触发事件的DOM节点的是id为div1,触发触发事件的类型是click时,在事件传播到body时,我们执行相应的处理函数。body怎么能知道这 么多,它如何知道绑定在它身上的执行函数什么时候执行?jQuery这些事件委托的原理根据事件冒泡的机制,广播的时候所有的节点都会知道,到底发生了什 么。

      DOM在为页面中的每个元素分派事件时,相应的元素一般都在事件冒泡阶段处理事件。在类似 body > div > a 这样的结构中,如果单击a元素,click事件会从a一直冒泡到div和body(即document对象)。因此,发生在a上面的单击事件,div和 body元素同样可以处理。而利用事件传播(这里是冒泡)这个机制,就可以实现事件委托。具体来说,事件委托就是事件目标自身不处理事件,而是把处理任务 委托给其父元素或者祖先元素,甚至根元素(document)。

      事件的取消

      在一些情况下我们需要阻止事件流的传播,或者解除之前绑定的事件。在实际工作中经常会遇到类似的需求,尤其是事件流的阻止。

      事件流阻止

      某些事件的对象是可以取消的,这意味着可以阻止默认动作的发生。事件对象是否可以取消,要通过Event.cancelable属性表示。事件 监听器可以调用Event.preventDefault()取消事件对象的默认动作。Event.stopPropagation()方法可以阻止事件 向上冒泡。

      事件的阻止根据场景不同和浏览器不同有不同的处理,因为事件处理模型不同的关系。如果在IE下,Event.returnValue = false就可以;如果是非IE下,用Event.preventDefault()阻止。事件流阻止,这里面阻止的是它的继续传播以及有可能产生的默认 动作。这里举一个常见且简单的例子,就是submit类型按钮的点击。

    <body> 
          <form action="asd.action"> 
            <input type="submit" id="tijiao" value="submit"/> 
          </form> 
          <script> 
            $("body").delegate('#tijiao','click',function(e){ 
              e.preventDefault(); 
            }); 
          </script> 
    </body> 

      这里点击按钮,form表单默认的提交被阻止了,也就是其默认动作终止了。这里有一个强调的就是滚动事件,滚动也是经常遇到需要处理的事件类型,但是滚动的阻止有点特例,它不支持在委托里进行阻止。

      说到这里我们感觉Event.preventDefault()和Event.stopPropagation()都可以阻止事件,那么它们有什么区别?

      前者是通知浏览器不要执行与事件相关联的默认动作,比如submit类型的按钮点击会提交;后者是停止事件流的继续冒泡,但是它对IE8及以下IE浏览器支持不好。如果直接使用return false则表示终止处理函数。

      事件函数的解除绑定

      和事件的绑定其实是相对应的,如果需要接触事件的绑定,运行对应的函数就可以了。如果是原生JS绑定则对应运行removeEventListener()和detachEvent()。看一个代码示例:

        var EventUtil = { 
          //注册 
          addHandler: function(element, type, handler){ 
            if (element.addEventListener){ 
              element.addEventListener(type, handler, false); 
            } else if (element.attachEvent){ 
              element.attachEvent("on" + type, handler); 
            } else { 
              element["on" + type] = handler; 
            } 
          }, 
          //移除注册 
          removeHandler: function(element, type, handler){ 
            if (element.removeEventListener){ 
                    element.removeEventListener(type, handler, false); 
            } else if (element.detachEvent){ 
                    element.detachEvent("on" + type, handler); 
            } else { 
                    element["on" + type] = null; 
            } 
          }              
         }; 

      如果是jQuery的绑定,也是存在对应的解绑函数用以清除注册事件,比如unbind()和undelegate()。

     

    转大神

    转载于:https://www.cnblogs.com/webph/p/5087379.html

    展开全文
  • browser.js

    2018-09-21 21:07:01
    前端开发可能会用到的JavaScript脚本,browser.js文件
  • browsersync的使用方法

    千次阅读 2018-04-13 11:34:39
    使用browsersync两年时间了,最近一段时间放弃了,不是browsersync的问题,是自己的问题,简单的说是,以前项目都是静态文件,直接用browsersync自带服务器跑起来就好,后来用nodejs express做项目,用到了art...











    使用browsersync两年时间了,最近一段时间放弃了,

    不是browsersync的问题,是自己的问题,简单的说是,

    以前项目都是静态文件,直接用browsersync自带服务器跑起来就好,

    后来用nodejs express做项目,用到了arttemplate当模版渲染,

    发现每次修改html后,必须重启nodejs才能生效,

    导致browsersync失效了,

    后来就放弃了。


    今天花了点时间找了下原因,原来是arttemplate默认开启缓存导致,坑。

    修改这个代码就好了:

    1
    template.config('cache'false);


    【安装】

    1
    npm install -g browser-sync


    【静态项目使用browsersync】

    自己可以去browsersync官网查看,其实使用很简单,总结下就是:

    1
    browser-sync start --server --files "**/*.css, **/*.html, **/*.js"

    cd到项目下,然后执行上面的方法即可,

    简单的说就是会监听该目录下的html,css,js变化,然后自动刷新页面


    【动态项目使用browsersync】

    动态项目的意思,就是用java,php,nodejs跑起来的项目,同时又想监听html,css,js的变化,

    拿nodejs来说,跑起一个端口9007的项目:

    1.png

    然后用browsersync的proxy做代理,监听这个项目:

    2.png

    代码:

    1
    browser-sync start --proxy "localhost:9007" --files "static/**/*.css, static/**/*.js, views/**/*.html"


    和静态项目的不同点是:

    静态项目:用browsersync自带的server跑起来

    动态项目:用java,php,nodejs跑起来,然后通过代理监听项目静态资源


    【browsersync】

    如果每次输入命令行麻烦,可以用browsersync的api方式,

    就是在项目下新建一个bs.js文件,然后内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // require 加载 browser-sync 模块
    var bs = require('browser-sync').create();
     
    // .init 启动服务器
    bs.init({
        proxy   : 'localhost:9007',
        port    : 9017,
        ui      : {
            port: 9027
        },
        files   : [
            'static/**/*.css',
            {
                match: ['views/**/*.html'],
                fn:    function (event, file){
    //              bs.reload();
                }
            }
        ]
    });
     
    // 现在请BS,而不是方法
    // 主Browsersync模块出口
    bs.reload('*.html');

    启动的时候使用node bs.js即可

    具体api查看:http://www.browsersync.cn/docs/api/


    展开全文
  • IEBrowser是对winfrom下webbrowser控件的封装,使得webbrowser的使用更加简单!该项目的地址:https://code.google.com/p/zsharedcode/wiki/IEBrowserDoc 使用方法和说明文档都有!
  • WebBrowser扩展类IEBrowser

    2013-12-03 14:42:31
    WebBrowser的扩展类,可以加载自定义脚本,c#编写, 用来编写 爬虫 , 自动化测试工具等
  • WebBrowser

    千次阅读 2013-05-14 03:19:01
    获取Html源码 uses mshtml; var iall : IHTMLElement; begin if Assigned(WebBrowser1.Document) then begin iall := (WebBrowser1.Document AS IHTMLDocument2).body; while iall.parentElement
    获取Html源码
    uses mshtml;
    var
        iall : IHTMLElement;
    begin
       if Assigned(WebBrowser1.Document) then
       begin
         iall := (WebBrowser1.Document AS IHTMLDocument2).body;
         while iall.parentElement <> nil do
         begin
           iall := iall.parentElement;
         end;
         memo1.Text := iall.outerHTML;
       end;
    end;
    模拟登录网站
    procedure TForm1.Button2Click(Sender: TObject);
    Var
      input: OleVariant;
      Doc: IHTMLDocument2;
      UserEdt, UserPwd: IHTMLElement;
      i: Integer;
    begin
      Doc := WebBrowser1.Document as IHTMLDocument2;
      input := Doc.all.item('switch_login', 0);     //模拟点击按钮
      input.click;
      UserEdt := Doc.all.item('u', 0) as IHTMLElement;
      UserPwd := Doc.all.item('p', 0) as IHTMLElement;
      UserEdt.setAttribute('Value', Edit1.Text, 0);
      UserPwd.setAttribute('Value', Edit2.Text, 0);
      input := Doc.all.item('login_button', 0);
      input.click;
    end;

    ((WebBrowser1.Document as IHTMLDocument2).body as HTMLBody).scroll := 'no';  
    (WebBrowser1.Document as IHTMLDocument2).body.style.border := '0';  
    (WebBrowser1.Document as IHTMLDocument2).body.style.borderStyle := 'none';  
    (WebBrowser1.Document as IHTMLDocument2).body.style.margin := '0';  
    (WebBrowser1.Document as IHTMLDocument2).body.style.padding := '0';  
    (WebBrowser1.Document as IHTMLDocument2).body.style.overflow := 'hidden';  
    //DocumentComplete事件中加入下列代码即可
    //去掉滚动条只对某些网页起作用,比如百度的页面就不知道为什么去不掉。
    //下面是用Webbrowser显示图片时去掉边框和滚动条的方法,也适用于部分网页,实际上就是设置网页CSS。
    WebBrowser1.Navigate('javascript:document.getElementById("Test").click();');
    //Delphi调用WebBrowser中JavaScript代码的方法
    procedure TForm1.Button1Click(Sender: TObject);
    Var
      I, Cnt: integer;
    begin
      Cnt := WebBrowser1.OleObject.Document.GetElementsByTagName('A').Length;
      for I := 0 to Cnt - 1 do
      Begin
        If WebBrowser1.OleObject.Document.GetElementsByTagName('A').Item(I)
          .InnerHtml = '活跃度' Then
        Begin
          WebBrowser1.OleObject.Document.GetElementsByTagName('A').item(5).Click;
       // memo1.Lines.Add(WebBrowser1.OleObject.document.getElementsByTagName('A').item(i).innerHTML);
        End;
      End;
    End;
    //遍历A元素,通过得到文字后进行模拟点击
    WebBrowser1.GoHome;  //到浏览器默认主页
    WebBrowser1.Refresh;  //刷新
    WebBrowser1.GoBack;  //后退
    WebBrowser1.GoForward;  //前进
    WebBrowser1.Navigate('...');  //打开指定页面
    WebBrowser1.Navigate('about:blank');  //打开空页面
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WebBrowser1.Navigate(
        'about:<head><title>标题</title><body bgcolor=#ff0000>' +
        '<form method="POST" action="http://del.cnblogs.com">' +
        '<input type="submit" value="提交" id="btnID" name="btnName">' +
        '</form></body>');
      Button2.Enabled := True;
      Button3.Enabled := True;
      Button4.Enabled := True;
    end;
    
    {假如知道按钮名称, 譬如是: btnName}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      WebBrowser1.OleObject.document.all.item('btnName').click;
      //WebBrowser1.OleObject.document.all.item('btnName', 0).click;
      FormCreate(nil);
    end;
    
    {假如知道按钮的 ID, 譬如是: btnID}
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      WebBrowser1.OleObject.document.getElementByID('btnID').click;
      FormCreate(nil);
    end;
    
    {假如只知道是第几个按钮, 譬如是第一个}
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      WebBrowser1.OleObject.document.getElementsByTagName('input').item(0).click;
      FormCreate(nil);
    end;
    
    end.
    //获取网页源代码
    var
      s: string;
    begin
      s := WebBrowser1.OleObject.document.body.innerHTML; //body内的所有代码
      s := WebBrowser1.OleObject.document.body.outerHTML; //body内的所有代码, 包含body标签
      s := WebBrowser1.OleObject.document.documentElement.innerHTML; //html内的所有代码
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('www.baidu.com');
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Key: string;
      doc, sr: OleVariant;
    begin
      if WebBrowser1.Busy = True then
      Begin
        Exit;
      End;
      Key := 'gfuchao'; // 待查找的字符串,你自己定义吧
      doc := WebBrowser1.Document;
      if VarIsEmpty(doc) then
        Exit;
      if VarIsEmpty(doc.selection) then
        sr := doc.body.createTextRange
      else
      begin
        sr := doc.selection.createRange;
        sr.collapse(True);
        sr.moveStart('character', 1);
      end;
      if sr.findText(Key, 1, 0) then
        sr.select // findText为True就表示含有关键字,你自己处理吧
      else
        ShowMessage('已收缩到文档末尾!');
      sr := Unassigned;
    end;
    







     


     

    展开全文
  • Visual Studio 中提供了浏览器控件 WebBrowser, 可以用在 WinForm 中充当一个小型的浏览器. WebBrowser 本身提供了调用页面中 js 函数的方法,但没有直接提供可以添加执行新的 js 脚本的功能.如果有如下的 js函数: ...
  • WebBrowser用法总结

    千次阅读 2017-08-22 16:57:17
    WebBrowser用法总结
  • webbrowser

    2018-11-09 12:54:59
    unity中app的浏览器,主要用于手机平台。unity中app的浏览器,主要用于手机平台。unity中app的浏览器,主要用于手机平台。
  • c#winform使用WebBrowser 大全

    万次阅读 2012-07-31 14:32:56
    C# WinForm WebBrowser (一) MSDN资料  1、主要用途:使用户可以在窗体中导航网页。 2、注意:WebBrowser 控件会占用大量资源。使用完该控件后一定要调用 Dispose 方法,以便确保及时释放所有资源。必须在...
  • Webbrowser控件史上最强技巧全集

    千次阅读 2018-08-04 15:57:12
    Webbrowser控件史上最强技巧全集 VB调用webbrowser技巧集 1、获得浏览器信息: Private Sub Command1_Click() WebBrow
  • EO.WebBrowser is a web browser engine based on Google's Chromium project but with native .NET programming interface --- don't worry, it's not a wrapper around the Chrome browser installed on your ...
  • 如何对webbrowser和IE编程

    万次阅读 2013-08-01 18:11:31
    如何对webbrowser和IE编程     一、 因为工作缘故,需要研究对IE编程,所以翻译了MS的有关资料,供参考。   IE的体系   WebBrowser Host 首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们...
  • WebBrowser 事件讲解

    千次阅读 2014-11-19 11:47:40
    由Internet Explorer 5激发事件 ...但实际上Internet Explorer如何激发事件呢?每次 Internet Explorer需要向客户提供关于当前活动状态的信息, Internet Explorer 激发通过DWebBrowserEvents2 连接点激发一个事件....
  • 1,在项目中引用程序集拓展中的Microsoft.mshtml后,可以在公共控件中找到WebBrowser控件。 2,在窗体中加入三个按钮,然后添加WebBrowser控件,右键控件选属性,设置相应的属性。 3,设置WebBrowser控件的属性 ...
  • VB Webbrowser控件详解

    万次阅读 2008-02-15 13:14:00
    新加内容:提交表单form1: Private Sub Command1_Click() WebBrowser1.Document.Forms("form1").submit End Sub 将form1中的名为u的属性设为不可用: Private Sub Command2_Click() WebBrowser1.Document.Forms(...
  • 修改WebBrowser控件的内核解决方案

    千次阅读 2016-01-28 14:27:52
    首先说一下原理 当下很大浏览器他们都是用了IE的core, 这个core只提供HTML/JS的执行和渲染,并没有给出关于界面和一些特性上的事,所以开发自己浏览器如果基于IE core需要自己完成这些内容。... ...ShD
  • wpf webBrowser控件

    万次阅读 2018-04-12 09:28:24
    wpf webBrowser控件介绍WebBrowsers可以让我们在窗体中进行导航网页。 WebBrowser控件内部使用ie的引擎,因此使用WebBrowser我们必须安装ie浏览器(windows默认安装的)。使用直接在xmal中使用webBrowser控件...
  • cefsharp 与webbrowser简单对比概述

    千次阅读 2017-05-16 16:45:34
    有个项目需要做个简单浏览器,从网上了解到几个相关的组件有winform自带的IE内核的WebBrowser,有第三方组件谷歌内核的webkit、cefsharp、chromiumfx等。 一开始是用的webbrowser 后来发现有些css样式是不兼容的于是...
  • Python基础--webbrowser

    万次阅读 2016-03-27 15:01:47
    很多人,一提到Python,想到的就是爬虫。我会一步一步的教你如何爬出某个...看看Python中对webbrowser的描述:The webbrowser module provides a high-level interface to allow displaying Web-based documents to u
  • 问题描述:有一个网页列表,准备用webBrowser的navigate一个个去访问,然后获取页面内容。但navigate是异步的,一调用之后,不等待页面加载完毕,因为访问网页需要时间,取决于网速,程序就返回循环继续用下一个网址...
  • 用java语言实现WebBrowser

    千次阅读 2007-05-25 17:29:00
    import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChan
  • 使 WebBrowser 更简单的插入、调用执行脚本, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowser Visual Studio 中提供了浏览器控件 WebBrowser, 可以用在 WinForm 中充当一个小型的浏览器.  ...
  • 写这篇文章之前,首先十分多谢 蒋晟 ,其次也谢谢ysjyniiq ,在csdn里私信问了N多人如何实现IDownloadManager接口,只有ysjyniiq 热心回答,其他人都十分忙^_^。 因为要写些实现自动控制的小程序,里面要实现下载...
  • 不支持在Internet Explorer中添加WebBrowser‘ 强制IE浏览器或WebBrowser控件使用指定版本显示网页 自从装了IE10之后,就发现好些个网站显示都不是那么的正常,网站上有些功能竟然还会出现一些...
  • WebBrowser实现HTML界面的应用

    千次阅读 2014-07-02 14:28:44
    这一篇将继续讨论在使用delphi进行普通应用程序开发的时候,WebBrowser的具体应用,主要是针对使用其进行HTML界面开发的,这也是一篇我在网上找到的资料,大家如要转载,请尊重原作者的知识产权,务必著名出处. ...
  • 首先说一下原理 当下很大浏览器他们都是用了IE的core, 这个core只提供HTML/JS的执行和渲染,并没有给出关于界面和一些特性上的事,所以开发自己浏览器如果基于IE core需要自己完成这些内容。... ...ShD
  • 首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用 (ReUse)webbrowser control的应用程序,可以是vb程序,也可以是
  • 21. IE WebBrowser控件的基本使用

    千次阅读 2017-10-22 11:17:03
    综合使用COM的自动化接口、连接点最好的例子就是IE WebBrowser控件,这也是最常用的一个COM控件,借助它我们可以用网页编写界面、调用本地代码,也就是当前流行的混合式程序。本文详述了IE控件的基本使用,包括静态...

空空如也

1 2 3 4 5 ... 20
收藏数 386,530
精华内容 154,612
关键字:

browser