精华内容
下载资源
问答
  • RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法 一、TEdgeBrowser安装部署说明 1.1、TEdgeBrowser的使用环境安装 1.2、TEdgeBrowser所的依赖的动态链接库的安装 二、delphi ...

    目录

    RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法

    一、TEdgeBrowser安装部署说明

    1.1、TEdgeBrowser的使用环境安装

    1.2、TEdgeBrowser所的依赖的动态链接库的安装

    二、delphi 10.4.1下TEdgeBrowser的使用

    1、很简单的浏览应用

    1.1、输出内容与介绍:

    1.2、代码如下:

    1.3、运行效果(再也不想TWebbrowser那样不支持Bootstrap响应了)

    2、与JavaScript交互

     附:本博客相关博文:

     喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:


     

     

    RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法

     

    一、TEdgeBrowser安装部署说明

    1.1、TEdgeBrowser的使用环境安装

        TWebBrowser使用Win10之前的操作系统提供的IE浏览器; 只要Windows上安装有IE,它就可以工作。
        Microsoft Edge当时还并不是操作系统组件一部分。因此需要在计算机上安装后才能使用.
        从https://www.MicrosoftEdgeInsider.com/cn/download下载的基于Chromium的Microsoft Edge浏览器(Canary渠道版本WebView2 SDK、Dev渠道版本)。
        WebView2控件,当前可通过https://www.nuget.org/packages/Microsoft.Web.WebView2上的NuGet或通过GetIt程序包管理器获得
        若未能安装,请用我下面的百度版本:
            链接:https://pan.baidu.com/s/16U7t-yRMHaz19cO0m6rgJg 
            提取码:8191 
            复制这段内容后打开百度网盘--来自百度网盘V6超级会员Karma的分享

        (请参考:  https://github.com/webview/webview/tree/master/dll/x86) 

    1.2、TEdgeBrowser所的依赖的动态链接库的安装

        安装后,TEdgeBrowser将起作用,其控件才会在UI中呈现Web内容:

        1、安装:需要将WebView2的微软安装包:64位、32位  
        2、安装:微软Edge浏览器的开发版本:MicrosoftEdgeDev
        3、将分x86和x64:webview.dll和WebView2Loader.dll的两组文件,分别拷贝到:C:\Windows\System32和C:\Windows\SysWOW64
        4、安装一下3、中两个文件(我安装的x86) :
            regsvr32 /i WebView2Loader.dll
            regsvr32 /i webview.dll
        5、复制文件:
            将4、中的x86的两个文件复制到:[Delphi10.4Update1安装文件夹]\bin\ 下。

    二、delphi 10.4.1下TEdgeBrowser的使用

    1、很简单的浏览应用

    https://chromedevtools.github.io/devtools-protocol/tot/

    https://chromium.googlesource.com/chromium/src/+log/master/third_party/blink/renderer/core/inspector/browser_protocol.json

    1.1、输出内容与介绍:

    
    默认开始初始化(UI设计时的)EdgeBrowser1或初始化动态产生的TEdgeBrowser
    LICoreWebView2接口TGUID:{189B8AAF-0426-4748-B9AD-243F537EB46B}
    EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用>0的,否则访问的是其基础进程ID(0):0
    窗体加载TEdgeBrowser组件时就完成了WebView2组件的初始化
    
    必须EdgeBrowser1.WebViewCreated,否则接口调用报错!
    有这样一些接口:
    DefaultInterface: ICoreWebView2
    ControllerInterface: ICoreWebView2Controller
    EnvironmentInterface: ICoreWebView2Environment
    SettingsInterface: ICoreWebView2Settings
    
    TEdgeBrowser:支持异步产生WebView控件:
    有这样一些方法:
    TEdgeBrowser.CreateWebView
    TEdgeBrowser.CloseWebView
    TEdgeBrowser.CloseBrowserProcess
    
    EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用:12504
    
    TEdgeBrowser需要初始化一些参数,以使一些方法或接口生效:
    
        EdgeBrowser1.BuiltInErrorPageEnabled :=true; //:替代了浏览器内部错误提示
        EdgeBrowser1.ZoomControlEnabled :=true; //:控制用户是否可以影响WebView的缩放
        EdgeBrowser1.DevToolsEnabled :=true; //:控制用户是否能够使用上下文菜单或键盘快捷键打开DevTools窗口
    
        EdgeBrowser1.StatusBarEnabled :=false;//:控制是否显示状态栏
        EdgeBrowser1.DefaultContextMenusEnabled :=true;//:控制是否在WebView中向用户显示默认上下文菜单
          //:若false:则网页代码中所有涉及Menu的事件将被屏蔽
    {
        EdgeBrowser1.DefaultScriptDialogsEnabled :=true;//:控制在显示JavaScript对话框时是否启动OnScriptDialogOpening
        EdgeBrowser1.ScriptEnabled :=true;//:控制是否在以后的所有导航视图中启用JavaScript的执行
          //:特别注意:这两个属性:只要引用无论false或true,
            //,网页下载的原生js将不在生效:由代码控制
    //}
    EdgeBrowser1.WebMessageEnabled :=true;
    
    开始访问TEdgeBrowser的接口对象0
    调用JavaScript也是类似的方式ExecuteScript()
    
    成功浏览网页
    
    TEdgeBrowser组件在执行Navigate时,触发开始浏览网页!
    
    TEdgeBrowser组件NavigationID:2,SizeRatio1
    :正在调取页面内容https://www.cpuofbs.com/main.html
    
    TEdgeBrowser组件CapturePreview输出呈现部分的图片:CapturePreview01.png ,AResult=0
    
    

    1.2、代码如下:

    unit uEdgeBrowser01;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages,
      System.SysUtils, System.Variants, System.Classes,
      Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
      WebView2,
      Winapi.ActiveX, Vcl.Edge, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls;
    
    type
      TForm_EdgeBrowser01 = class(TForm)
        EdgeBrowser1: TEdgeBrowser;
        Panel1: TPanel;
        BitBtn_Navigate: TBitBtn;
        Panel2: TPanel;
        Memo1: TMemo;
        BitBtn_CapturePreview: TBitBtn;
        procedure BitBtn_NavigateClick(Sender: TObject);
        procedure EdgeBrowser1NavigationStarting(Sender: TCustomEdgeBrowser;
          Args: TNavigationStartingEventArgs);
        procedure EdgeBrowser1ContentLoading(Sender: TCustomEdgeBrowser;
          IsErrorPage: Boolean; NavigationID: TUInt64);
        procedure EdgeBrowser1CreateWebViewCompleted(Sender: TCustomEdgeBrowser;
          AResult: HRESULT);
        procedure EdgeBrowser1CapturePreviewCompleted(Sender: TCustomEdgeBrowser;
          AResult: HRESULT);
        procedure BitBtn_CapturePreviewClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form_EdgeBrowser01: TForm_EdgeBrowser01;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm_EdgeBrowser01.FormCreate(Sender: TObject);
    var LICoreWebView2:ICoreWebView2;
    begin
      Memo1.Lines.Add('默认开始初始化(UI设计时的)EdgeBrowser1或初始化动态产生的TEdgeBrowser');
      GetInterface( StringToGUID('{189B8AAF-0426-4748-B9AD-243F537EB46B}'),LICoreWebView2);
      if LICoreWebView2 = EdgeBrowser1.DefaultInterface then
        Memo1.Lines.Add('LICoreWebView2接口TGUID:'+'{189B8AAF-0426-4748-B9AD-243F537EB46B}' );
      //GUIDToString StringToGUID
    end;
    
    procedure TForm_EdgeBrowser01.FormShow(Sender: TObject);
    begin
      Memo1.Lines.Add('EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用>0的,否则访问的是其基础进程ID(0):'
        +EdgeBrowser1.BrowserProcessID.ToString );
    end;
    
    procedure TForm_EdgeBrowser01.BitBtn_NavigateClick(Sender: TObject);
    var LHResult_PostWebMessage:HResult;
    begin
      if EdgeBrowser1.WebViewCreated then//:必须的,否则接口调用报错:
      begin
        Memo1.Lines.Add('必须EdgeBrowser1.WebViewCreated,否则接口调用报错!'+sLineBreak
          +'有这样一些接口:'+sLineBreak
          +'DefaultInterface: ICoreWebView2'+sLineBreak
          +'ControllerInterface: ICoreWebView2Controller'+sLineBreak
          +'EnvironmentInterface: ICoreWebView2Environment'+sLineBreak
          +'SettingsInterface: ICoreWebView2Settings'+sLineBreak
          );
        Memo1.Lines.Add('TEdgeBrowser:支持异步产生WebView控件:'+sLineBreak
          +'有这样一些方法:'+sLineBreak
          +'TEdgeBrowser.CreateWebView'+sLineBreak
          +'TEdgeBrowser.CloseWebView'+sLineBreak
          +'TEdgeBrowser.CloseBrowserProcess'+sLineBreak
          );
        Memo1.Lines.Add('EdgeBrowser浏览器内部执行的进程ID必须放在其事件中取引用:'
          +EdgeBrowser1.BrowserProcessID.ToString +sLineBreak );
        Memo1.Lines.Add('TEdgeBrowser需要初始化一些参数,以使一些方法或接口生效:' +sLineBreak
          +'EdgeBrowser1.BuiltInErrorPageEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.DefaultContextMenusEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.ZoomControlEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.StatusBarEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.DevToolsEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.DefaultScriptDialogsEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.ScriptEnabled :=true;' +sLineBreak
          +'EdgeBrowser1.WebMessageEnabled :=true;' +sLineBreak
          );
    
        EdgeBrowser1.BuiltInErrorPageEnabled :=true; //:替代了浏览器内部错误提示
        EdgeBrowser1.ZoomControlEnabled :=true; //:控制用户是否可以影响WebView的缩放
        EdgeBrowser1.DevToolsEnabled :=true; //:控制用户是否能够使用上下文菜单或键盘快捷键打开DevTools窗口
    
        EdgeBrowser1.StatusBarEnabled :=false;//:控制是否显示状态栏
        EdgeBrowser1.DefaultContextMenusEnabled :=true;//:控制是否在WebView中向用户显示默认上下文菜单
          //:若false:则网页代码中所有涉及Menu的事件将被屏蔽
    {
        EdgeBrowser1.DefaultScriptDialogsEnabled :=true;//:控制在显示JavaScript对话框时是否启动OnScriptDialogOpening
        EdgeBrowser1.ScriptEnabled :=true;//:控制是否在以后的所有导航视图中启用JavaScript的执行
          //:特别注意:这两个属性:只要引用无论false或true,
            //,网页下载的原生js将不在生效:由代码控制
    //}
    
        EdgeBrowser1.WebMessageEnabled :=true;//:必须的,否则接口PostWebMessageAsString调用报错:
    
        LHResult_PostWebMessage
          :=EdgeBrowser1.DefaultInterface.PostWebMessageAsString(
            PWideChar('{ICoreWebView2:true}') ) ;//:0接口函数执行成功 -1失败
        if LHResult_PostWebMessage> -1 then
          Memo1.Lines.Add('开始访问TEdgeBrowser的接口对象'
            +IntToStr(LHResult_PostWebMessage) +sLineBreak
            +'调用JavaScript也是类似的方式ExecuteScript()' +sLineBreak
            );
          //:开始访问TEdgeBrowser的接口对象
    
        TThread.CreateAnonymousThread(
          procedure
          begin
            TThread.Synchronize( nil,
            procedure //var AHTMLContent: string;
            begin
              //EdgeBrowser1.NavigateToString(AHTMLContent);
              if EdgeBrowser1.Navigate( //:Navigate:如果返回了错误码:=true,否则:=false
                'https://www.cpuofbs.com/main.html' )=false then
              Memo1.Lines.Add('成功浏览网页' +sLineBreak );
    
            end);
          end
        ).Start;
      end;
    end;
    
    procedure TForm_EdgeBrowser01.EdgeBrowser1ContentLoading(
      Sender: TCustomEdgeBrowser; IsErrorPage: Boolean; NavigationID: TUInt64);
    begin
      Memo1.Lines.Add('TEdgeBrowser组件NavigationID:'+IntToStr(NavigationID)
        +',SizeRatio'+EdgeBrowser1.SizeRatio.ToString +sLineBreak
        +':正在调取页面内容'+EdgeBrowser1.LocationURL +sLineBreak);
    end;
    
    procedure TForm_EdgeBrowser01.EdgeBrowser1CreateWebViewCompleted(
      Sender: TCustomEdgeBrowser; AResult: HRESULT);
    begin
      Memo1.Lines.Add('窗体加载TEdgeBrowser组件时就完成了WebView2组件的初始化'+sLineBreak );
    end;
    
    procedure TForm_EdgeBrowser01.EdgeBrowser1NavigationStarting(
      Sender: TCustomEdgeBrowser; Args: TNavigationStartingEventArgs);
    begin
      Memo1.Lines.Add('TEdgeBrowser组件在执行Navigate时,触发开始浏览网页!'+sLineBreak );
    end;
    
    procedure TForm_EdgeBrowser01.BitBtn_CapturePreviewClick(Sender: TObject);
    begin
      if EdgeBrowser1.WebViewCreated then
      begin
        EdgeBrowser1.ZoomFactor:=100/100;
        EdgeBrowser1.CapturePreview(
          System.SysUtils.ExtractFilePath(
            System.ParamStr(0))+'CapturePreview01.png',PNG);
      end;
    
    end;
    
    procedure TForm_EdgeBrowser01.EdgeBrowser1CapturePreviewCompleted(
      Sender: TCustomEdgeBrowser; AResult: HRESULT);
    begin
      Memo1.Lines.Add('TEdgeBrowser组件CapturePreview输出呈现部分的图片:CapturePreview01.png ,AResult='+IntToStr(AResult)+sLineBreak );
    end;
    
    
    end.
    object Form_EdgeBrowser01: TForm_EdgeBrowser01
      Left = 0
      Top = 0
      Caption = 'TEdgeBrowser'#24212#29992'01'
      ClientHeight = 563
      ClientWidth = 533
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      OnShow = FormShow
      PixelsPerInch = 96
      TextHeight = 13
      object Panel1: TPanel
        Left = 0
        Top = 503
        Width = 533
        Height = 60
        Align = alBottom
        TabOrder = 0
        ExplicitTop = 522
        object BitBtn_Navigate: TBitBtn
          Left = 40
          Top = 6
          Width = 73
          Height = 43
          Caption = #27983#35272#32593#39029
          Font.Charset = GB2312_CHARSET
          Font.Color = clWindowText
          Font.Height = -13
          Font.Name = #24494#36719#38597#40657
          Font.Style = []
          ParentFont = False
          TabOrder = 0
          OnClick = BitBtn_NavigateClick
        end
        object BitBtn_CapturePreview: TBitBtn
          Left = 128
          Top = 6
          Width = 137
          Height = 43
          Caption = #25429#33719#21576#29616#20869#23481#20026#22270#29255
          Font.Charset = GB2312_CHARSET
          Font.Color = clWindowText
          Font.Height = -13
          Font.Name = #24494#36719#38597#40657
          Font.Style = []
          ParentFont = False
          TabOrder = 1
          OnClick = BitBtn_CapturePreviewClick
        end
      end
      object Panel2: TPanel
        Left = 0
        Top = 0
        Width = 533
        Height = 503
        Align = alClient
        Caption = 'Panel2'
        TabOrder = 1
        ExplicitWidth = 704
        ExplicitHeight = 522
        object EdgeBrowser1: TEdgeBrowser
          Left = 1
          Top = 345
          Width = 531
          Height = 157
          Align = alClient
          TabOrder = 0
          OnCapturePreviewCompleted = EdgeBrowser1CapturePreviewCompleted
          OnContentLoading = EdgeBrowser1ContentLoading
          OnCreateWebViewCompleted = EdgeBrowser1CreateWebViewCompleted
          OnNavigationStarting = EdgeBrowser1NavigationStarting
          ExplicitTop = 312
          ExplicitHeight = 190
        end
        object Memo1: TMemo
          Left = 1
          Top = 1
          Width = 531
          Height = 344
          Align = alTop
          Lines.Strings = (
            'Memo1')
          ScrollBars = ssVertical
          TabOrder = 1
        end
      end
    end

    1.3、运行效果(再也不想TWebbrowser那样不支持Bootstrap响应了)

    2、与JavaScript交互

          详见下篇继续分享:

     附:本博客相关博文:

             1、RAD Studio 10.4.1的TEdgeBrowser与javascript交互-基于Chromium的Edge浏览器控件用法之二

             2、《Delphi Restful之客户端javascript与中间件服务器交互》

     喜欢的话,就在下面点个赞、收藏就好了,方便看下次的分享:

     

    展开全文
  • js判断当前浏览器是什么浏览器

    千次阅读 2019-10-29 16:21:03
    console.log(navigator) const explorer = navigator... // IE 判断浏览器是否支持ActiveX控件,如果浏览器支持ActiveX控件可以利用, if (!!window.ActiveXObject || "ActiveXObject" in window) { Brows...
    		console.log(navigator)
    		const explorer = navigator.userAgent;
    		var Browser;
    		// IE  判断浏览器是否支持ActiveX控件,如果浏览器支持ActiveX控件可以利用,
    		if (!!window.ActiveXObject || "ActiveXObject" in window) {
    		  Browser = 'ie';
    		  console.log("当前浏览器为:IE");
    		}
    		//IE  documentMode是一个IE的私有属性,在IE8+中被支持。
    		if (window.document.documentMode) {
    		  Browser = 'ie';
    		  console.log("当前浏览器为:IE");
    		}
    		//firefox 
    		else if (explorer.indexOf("Firefox") >= 0) {
    		  Browser = 'Firefox';
    		  console.log("当前浏览器为:Firefox");
    		}
    		//Chrome
    		else if (explorer.indexOf("Chrome") >= 0) {
    		  Browser = 'Chrome';
    		  console.log("当前浏览器为:Chrome");
    		}
    		//Opera
    		else if (explorer.indexOf("Opera") >= 0) {
    		  Browser = 'Opera';
    		  console.log("当前浏览器为:Opera");
    		}
    		//Safari
    		else if (explorer.indexOf("Safari") >= 0) {
    		  Browser = 'Safari';
    		  console.log("当前浏览器为:Safari");
    		}
    		//Netscape
    		else if (explorer.indexOf("Netscape") >= 0) {
    		  Browser = 'Netscape';
    		  console.log('当前浏览器为:Netscape');
    		}
    

    js判断当前浏览器是什么浏览器

    展开全文
  • android 浏览器控件

    千次阅读 2012-08-02 15:58:01
    在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。  什么是webkit  WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。...

    在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 

    什么是webkit
     

    WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。 同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。
     

    传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS。不过, 随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。
     

    这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。
     

    在开发过程中应该注意几点:
     
        1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
        2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
            webview.getSettings().setJavaScriptEnabled(true);  
        3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。

     

    1. mWebView.setWebViewClient(new WebViewClient(){       
    2.                     public boolean shouldOverrideUrlLoading(WebView view, String url) {       
    3.                         view.loadUrl(url);       
    4.                         return true;       
    5.                     }       
    6.         });   

     

     

     4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。

     

    1. public boolean onKeyDown(int keyCode, KeyEvent event) {       
    2.         if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
    3.             mWebView.goBack();       
    4.                    return true;       
    5.         }       
    6.         return super.onKeyDown(keyCode, event);       
    7.     }     

     

     

    下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。


    package com.orgcent.webview;

    import android.app.Activity;
    import android.os.Bundle;
    import android.webkit.JsPromptResult;
    import android.webkit.JsResult;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.webkit.WebSettings.LayoutAlgorithm;

    public class AndroidWebViewActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            WebView content_wv = (WebView) findViewById(R.id.content_wv);
            WebSettings ws = content_wv.getSettings();
            ws.setJavaScriptEnabled(true); // 设置支持javascript脚本
            ws.setAllowFileAccess(true); // 允许访问文件
            ws.setBuiltInZoomControls(true); // 设置显示缩放按钮
            ws.setSupportZoom(true); //支持缩放

            /**
             * 用WebView显示图片,可使用这个参数
             * 设置网页布局类型:
             * 1、LayoutAlgorithm.NARROW_COLUMNS : 适应内容大小
             * 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放
             */

            ws.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
            ws.setDefaultTextEncodingName("utf-8"); //设置文本编码
            ws.setAppCacheEnabled(true);
            ws.setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式

            //添加Javascript调用java对象
            content_wv.addJavascriptInterface(this"java2js");
            content_wv.setWebViewClient(new WebViewClientDemo());
            content_wv.setWebChromeClient(new WebViewChromeClientDemo());
            //设置打开的网页
            content_wv.loadUrl("http://orgcent.com");
            //使用WebView来显示图片
            content_wv.loadData("<img src='http://orgcent.com'/>""text/html""utf8");
        }

        private class WebViewClientDemo extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
                return true;
            }
        }

        private class WebViewChromeClientDemo extends WebChromeClient {
            // 设置网页加载的进度条
            public void onProgressChanged(WebView view, int newProgress) {
            }

            // 获取网页的标题
            public void onReceivedTitle(WebView view, String title) {
            }

            // JavaScript弹出框
            @Override
            public boolean onJsAlert(WebView view, String url, String message,
                    JsResult result) {
                return super.onJsAlert(view, url, message, result);
            }

            // JavaScript输入框
            @Override
            public boolean onJsPrompt(WebView view, String url, String message,
                    String defaultValue, JsPromptResult result) {
                return super.onJsPrompt(view, url, message, defaultValue, result);
            }

            // JavaScript确认框
            @Override
            public boolean onJsConfirm(WebView view, String url, String message,
                    JsResult result) {
                return super.onJsConfirm(view, url, message, result);
            }
        }

    }

    展开全文
  • 但最近好几个朋友都表示通过动态库加载的方式在浏览器控件中使用方便,也有朋友说知道如何在浏览器控件中使用;本文旨在演示如何在浏览器控件中使用牛牛截图;目前牛牛截图控件的体积已经缩减到了150KB,更加...

    牛牛截图控件已经提供Web控件及标准的Javascript接口,测试程序及调用示例请访问:http://www.ggniu.cn/


    但最近好几个朋友都表示通过动态库加载的方式在浏览器控件中使用不方便,也有朋友说不知道如何在浏览器控件中使用;本文旨在演示如何在浏览器控件中使用牛牛截图;目前牛牛截图控件的体积已经缩减到了150KB,更加便于在浏览器中应用了。

     

    本文的相关示例代码包含在ActiveX控件以及Npapi插件中调用牛牛截图控件,ActiveX控件的写法就不多描述了,npapi插件的写法,此处直接在其相关的示例:npruntime示例上改动而成;这两个控件分别为:ActiveXWrapper.dll以及npcapture.dll,前者应用于IE浏览器,后者使用于FFChrome浏览器中。

     

    在两个控件中,调用牛牛截图的相关代码,与之前的在应用程序中的方法一模一样:

     

    typedef int (*FnStartScreenCapture)(const char* szAuth, const char* szDefaultSavePath, void* pCallBack, unsigned long hWndNotice, unsigned int noticeMsg);
    FnStartScreenCapture gl_StartScreenCapture = NULL;
    typedef int (*FnInitScreenCapture)(unsigned long trackerColor, unsigned long editBorderColor, int nTransparent, int flag);
    FnInitScreenCapture gl_InitCapture = NULL;
     
    string path = GetDllPath() + "\\NiuniuCapture.dll";
    m_hModule = LoadLibrary(path.c_str());
    DWORD dret = GetLastError();
    gl_StartScreenCapture = (FnStartScreenCapture)GetProcAddress(m_hModule, "StartScreenCapture");
    gl_InitCapture = (FnInitScreenCapture)GetProcAddress(m_hModule, "InitScreenCapture");
     
    //设置截图边框的样式 
    gl_InitCapture(RGB(255, 0, 0), RGB(0, 174, 255), 180, 0);
     
    STDMETHODIMP CCActiveXWrapper::TestControl(void)
    {
    //可以添加新的接口,由WEB传入地址,截图后,通过控件自动将图片发往服务器
    //此处一定要找一个可写的路径来保存截图
    gl_StartScreenCapture("niuniu", "", NULL, 0, 0);
    return S_OK;
    }
     
     
    //在npcapture中的调用:
    bool
    ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args,
                                   uint32_t argCount, NPVariant *result)
    {
    if(name == sCapture_id)
    {
    gl_StartScreenCapture("niuniu", "", NULL, 0, 0);
    return true;
    }
    ///..........................


    只是此处要注意的一点是,确保浏览器控件能找到牛牛截图控件,我当前采用的办法是将牛牛截图控件与浏览器控件放在同一路径下,控件中读取自身所在路径,在本目录下读取加载牛牛截图控件,具体的大家看Demo中的代码吧。

    下载地址:

    牛牛截图控件_含浏览器控件调用示例


    控件的测试:

    1. 关于ActiveX控件,可以执行regsvr32来注册,同时需要把NiuniuCapture.dll复制到Windows目录下[ActiveX控件被复制至此目录下]

    注册后,在IE浏览器中打开ActiveXWrapper.html,效果如下:

     

    2. Npapi插件的注册,可以执行安装包中的niuniucapture_npapi.reg [先修改相应的目录]

    如:当前npcapture.dllNiuniuCapture.dll在目录:c:\testcapture\下,则注册表脚本为:

    Windows Registry Editor Version 5.00 
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MozillaPlugins\@niuniu.com/npcaptrue]
    "Path"="c:\\testcapture\\npcapture.dll"

    以上脚本是在WIN7 64位下的,32位系统应该有所调整 

     

    FF或者Chrome浏览器中打开test_npcapture.html,点击“capture”,效果如下:


     

    以上仅演示如何调用,关于如何将牛牛截图控件与浏览器控件一并发布,网上有许多相关的文章,以下也提供相应的思路供参考:

    1. 对于ActiveX控件,可以生成CAB包,CAB包中可以包含多个DLL的复制与注册,当然可以将咱们的NiuNiuCapture.dll包含在其中了

     

    2. Npapi的打包同样支持多文件,具体可参考:

    http://blog.csdn.net/zssureqh/article/details/9396435

     

    3. 如果实在觉得多DLL麻烦,也可以考虑将NiuniuCapture.dll作为资源文件放入浏览器控件中,在运行时,根据判断是否需要将NiuniuCapture.dll释放到磁盘上[确定找到一个可写的目录],再加载释放出来的文件即可。

     

    4. 关于Npapi的注册,可以根据不同的场景进行不同的注册方式,目前看来,最方便的就是注册表写入方式了,可以直接在安装包中加上这样的操作即可。

    展开全文
  • 当前操作环境不支持支付宝控件 这种情况多发生在windows10的环境下,参考 解决办法! 这个问题解决了,可是太悲剧了,你的电脑可能又出现新的问题。 比如一直处于“正在安装“”中,又或者其他问题。请参考解决...
  • 基于JxBrowser的浏览器控件封装实现Java Swing的浏览器集成背景实现目标实现代码运行效果完整的代码及依赖jar文件下载 背景 进期客户提出在一个Java Swing项目要集成另外2个系统: 1、集成Fine Report(基于Java Web...
  • 网络浏览器控件同样支持超文本链结方式和URL(通用资源定位器)导向方式。同样,网络浏览器控件支持网络浏览的记忆功能,可以允许浏览者浏览以前访问过的网址﹑文件夹和文件。网络浏览器控件支持剖析和显示用HTML...
  •   第一步,修改系统配置 在运行中输入“gpedit....如果实在知道怎么打开,可以参照下图,在红色的地址栏中输入gpedit.msc 后点右边的键头打开 gpedit.msc    接下来 在计算机配置-&gt;管理模板...
  • 浏览器控件JxBrowser v6.14大版本更新,注入CSS。
  • ie9浏览器无法安装ActiveX控件问题

    千次阅读 2017-02-28 16:42:19
    今天在web页面中测试同事给的ActiveX控件时,发现在其他台机器ie8浏览器都可以正常看到显示内容。而我自己的电脑上装的是ie9,看到内容。按理说这个应该跟ie的版本关系不大,后面发现其他台测试的ie版本都是32位的...
  • function isIE() { //是否为ie浏览器? if (window.ActiveXObject || "ActiveXObject" in window){ return true; }else{ return false;...如果是IE浏览器或支持ActiveX的浏览器,则返回true,否则返回fal...
  • window.ActiveXObject:判断浏览器是否支持ActiveX控件,只有IE浏览器里面支持ActiveX控件 if (!!window.ActiveXObject || "ActiveXObject" in window) { console.log('是IE浏览器') } else { console.log('不是...
  • 利用javascript判断浏览器是否已经安装ActiveX控件和是否禁止运行ActiveX控件 (转) 从微软给IE打上SP2以后,当IE在打开一些含有ActiveX控件的网页是,不再像以前那样,弹出提示框,让用户选择是否安装控件;现在...
  • 本文向开发人员介绍 J# 浏览器控件,并说明将 Java 小程序迁移到 .NET 框架的步骤。本文还讨论了其他一些主题,如 J# 浏览器控件的安全性和调试,以及当前版本中支持的功能。点击此处阅读全文
  • 最近在使用海康的SDK视频平台在google浏览器无法播放...那个项目前端页面IE浏览器效果太差了,只能Google,所以,大神们有没有解决OCX控件无法在其他浏览器播放的问题? 或者提供 海康的SKD视频在google浏览器播放方案?
  • 摘要 调整.NET控件WebBrowser的默认浏览器内核版本 ...今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser...当前浏览器使用的内核,可以通过访问下面这个网站获取:http://ie.ico
  • WEB打印控件Lodop(V6.x)使用说明及样例   Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印。控件功能强大,却简单易用,所有...
  • 大 | 中 | 小 极光炫影 发表于 2008-06-25 17:59 Microsoft Web Browser ActiveX 控件是一个基于IE内核的浏览器控件,利用它您可以在您的应用程序界面中方面地嵌入微型的浏览器。通过实现各种接口,您甚至可以利用它...
  • activity中的代码主要是设置一些webview使用过程中需要设置的Websettings,去设置浏览器支持js脚本,适配屏幕,web的加载器等; 代码如下: package com.anana.sockettest; import android.support.v7.app....
  • 检查当前浏览器是否安装flash插件

    千次阅读 2014-02-07 14:32:27
    虽然现在html5流行起来,flash逐渐会被引退,但是在平常开发的时候偶尔会用得到对于flash插件有需求的小插件,比如uploadify插件用习惯了flash的版本的话就太想换html5版本的,但是有些浏览器会没有安装flash插件...
  • 发布日期: 7/5/2004 | 更新日期: 7/5/2004Visual J# .NET 小组Microsoft Corporation摘要:通过 Microsoft J# 浏览器控件,开发人员可以将所编写的在 Java 虚拟机上运行的 Java 小程序迁移到 .NET 框架。...
  • OCX控件在web页面能加载的问题 IE8浏览器32位被360篡改为64位 解决办法: 除了在ie浏览器自定义项中设置启用,将C:\Program Files\Internet Explorer下的文件重新复制一份新的放到c盘根目录下,在C:\Program ...
  •  嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件。CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已...
  • 好了,废话跟原理也说够了,下面教程开始:其实浏览器不能加载的原因提示里面跟我们说得很清楚了,解决办法也说得很清楚了,就是需要使用内核为IE6+的浏览器,并且打开Internet选项中关于ActiveX控件的选项就可以了...
  • CEF中文教程(google chrome浏览器控件) -- CEF编译

    万次阅读 热门讨论 2013-04-11 10:47:08
    这部分讲解CEF的分支信息并介绍下载编译和打包源代码 背景:  CEF项目是做为Chromium的... CEF项目在不断的发展中,你可以从这里看到整个项目的文件trunk,因为当前的版本紧跟Chromium,所以推荐拿当前的版本来开
  • 让Firefox支持ActiveX控件

    万次阅读 2014-11-21 07:04:49
    所为对某些包含ActiveX控件的网站并兼容,知道怎么做能让Firefox支持ActiveX呢?   答:两种方案:一种是使用IETab这个插件,在Firefox下直接调用IE浏览器内核进行浏览;     另一种是使

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,195
精华内容 24,878
关键字:

当前浏览器不支持控件