1. 程式人生 > >duilib CWebBrowser控制元件 cxx與js互動

duilib CWebBrowser控制元件 cxx與js互動

轉自:http://blog.csdn.net/sunflover454/article/details/60873557(侵刪)

C++和js相互呼叫是個有意思的事情。

一、js中呼叫C++函式。函式原型

[html]  view plain  copy
  1. int g_FunSub(int x,int y);  

呼叫方式如下:

[html]  view plain  
copy
  1. <html>    
  2. <head>    
  3.     <meta charset="utf-8" />    
  4.     <title></title>    
  5.     <
    script language="javascript">    
  6.         function CallCppFunSub(x,y)    
  7.         {  
  8.             var num
     = window.external.g_FunSub(x,y);   
  9.             alert(num);  
  10.             return num  
  11.         }   
  12.         function JsFunSub(x,y)    
  13.         {  
  14.             var num = x - y;  
  15.             alert(num);  
  16.             return num  
  17.         }  
  18.     </script>    
  19. </head>    
  20. <body>  
  21.     <button type="button" onclick="CallCppFunSub(4,7)">呼叫C++函式</button>    
  22. </body>    
  23. </html>   
具體實現是在C++程式碼中寫的:

[cpp]  view plain  copy
  1. #pragma once  
  2.   
  3. class CWebBrowserExUI :  
  4.     public CWebBrowserUI  
  5. {  
  6. public:  
  7.     CWebBrowserExUI();  
  8.     ~CWebBrowserExUI();  
  9.   
  10.     LPCTSTR GetClass() const;  
  11.     LPVOID GetInterface(LPCTSTR pstrName);  
  12.   
  13.     virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(__RPC__in REFIID riid, __RPC__in_ecount_full(cNames) LPOLESTR *rgszNames, UINT cNames, LCID lcid, __RPC__out_ecount_full(cNames) DISPID *rgDispId);  
  14.     virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);  
  15.   
  16.     virtual HRESULT STDMETHODCALLTYPE GetExternal(IDispatch **ppDispatch)  
  17.     {  
  18.         //重寫GetExternal返回一個ClientCall物件  
  19.         *ppDispatch = this;  
  20.         return S_OK;  
  21.     }  
  22. };  

[cpp]  view plain  copy
  1. #include "stdafx.h"  
  2. #include "WebBrowserExUI.h"  
  3. #include <atlcomcli.h>  
  4.   
  5.   
  6. int g_FunSub(int x, int y)  
  7. {  
  8.     return (x - y);  
  9. }  
  10.   
  11. CWebBrowserExUI::CWebBrowserExUI()  
  12. {  
  13. }  
  14.   
  15.   
  16. CWebBrowserExUI::~CWebBrowserExUI()  
  17. {  
  18. }  
  19.   
  20.   
  21. LPCTSTR CWebBrowserExUI::GetClass() const  
  22. {  
  23.     return _T("WebBrowserExUI");  
  24. }  
  25.   
  26. LPVOID CWebBrowserExUI::GetInterface(LPCTSTR pstrName)  
  27. {  
  28.     if (_tcsicmp(pstrName, _T("WebBrowserEx")) == 0)  
  29.         return static_cast<CWebBrowserExUI*>(this);  
  30.   
  31.     return CActiveXUI::GetInterface(pstrName);  
  32. }  
  33.   
  34.   
  35. 相關推薦

    duilib CWebBrowser控制元件 cxxjs互動

    轉自:http://blog.csdn.net/sunflover454/article/details/60873557(侵刪) C++和js相互呼叫是個有意思的事情。 一、js中呼叫C++函式。函式原型 [html]  view plain

    duilib CWebBrowser控制元件 C++呼叫js函式&&js中呼叫C++函式

    C++和js相互呼叫是個有意思的事情。 一、js中呼叫C++函式。函式原型 int g_FunSub(int x,int y); 呼叫方式如下: <html> <head&g

    Winform控制元件WebBrowserJS指令碼互動

    1)在c#中呼叫js函式 如果要傳值,則可以定義object[]陣列。 具體方法如下例子: 首先在js中定義被c#呼叫的方法: function Messageaa(message) {        alert(message); } 在c#呼叫js方法Messageaa         p

    MFC的WebBrowser控制元件 C++JavaScript之間資料互動傳遞

    ----------------------------------------------------------------------------------------------------------------------------------------

    控制元件TextViewEditText的簡單運用

    文字框(TextView) 簡介 TextView直接繼承View,作用就是在介面上顯示文字(類似於Swing中的JLabel),同時它還是EditText、Button兩個UI元件類的父類。 另外Android關閉了它的文字編輯功能,如果想編輯內容,則可以使用EditText。

    iOSJS互動的4種方法

    iOS與JS互動的方法: 1.攔截url(適用於UIWebView和WKWebView) 2.JavaScriptCore(只適用於UIWebView,iOS7+) 3.WKScriptMessageHandler(只適用於WKWebView,iOS8+) 4.WebViewJ

    OCJS互動 初體會

    第一篇部落格,有點小緊張、小期待,會不會有人看?有也好,沒有也罷,權當自己圖個樂兒,記錄近來學到的知識。閒話少說,進入正題! OC與JS互動的方式:1、使用UIWebView通過攔截Request完成JS調取OC,通過stringByEvaluatingJavaScriptFromString注入JS函式或

    Swift WKWebView(二):iOSjs互動

    在上一篇中我們介紹了Swift下WKWebView的基本使用方法,下面總結一下iOS與js互動的實現,最終的頁面效果如下圖所示: 其中,js有關程式碼如下: function navButtonAction(name,age){

    Android開發之Webview中原生JS互動

    文章目錄 概述 使用場景 互動方式 Java呼叫JS程式碼 JS呼叫Java程式碼 總結 概述 由於手機硬體資源的快速提升,使得采用混合開發的可能性逐漸成為現實並且流行起來。Android開發中

    使用WebViewJavascriptBridge實現OCJS互動

      陳向陽哈  關注 2015.09.29 15:36* 最後編輯於 2015.10.13 09:44   字數 146

    目前iOSJS互動的方法選擇比對

    只是針對目前存在的互動方式做個比對。不會涉及任何實現。如需知道具體的使用。可自行baidu或者Google。 攔截協議 攔截協議是最簡單的互動方式,在Android端和iOS端直接攔截,可以統一web前端的程式碼。web前端通過在連結中帶上引數。比如: 88gongxiang:

    純前端表格控制元件SpreadJSJava結合,實現模板上傳和下載等功能

    安裝部署: 開發環境: 後臺伺服器端採用 Java 、SpringMVC。 資料儲存到 \demo_web\WEB-INF\FileDatabase.txt 檔案中,不需要依賴DB。 採用 Eclipse Java EE IDE for Web Develope

    OCJS互動之JavaScriptCore

    JavaScriptCore初探 在iOS7之前,原生應用和Web應用之間很難通訊。如果你想在iOS裝置上渲染HTML或者執行JavaScript,你不得不使用UIWebView。iOS7引入了JavaScriptCore,功能更強大,使用更簡單。 ###JavaScriptCore

    Android之webViewjs互動

    一、java呼叫js操作: 1.佈局檔案: <WebView android:id="@+id/web" android:layout_width="match_parent" android:layout_height="mat

    安卓混淆之後,androidjs互動異常原因

    解決方案:需要js互動程式碼不被混淆掉,加入以下程式碼即可 -keepclassmembers class com.taohaohuo365.taohaohuo.activity.H5Activity$AndroidAndJSInterface { public *; } -keepcla

    把WebBrowser瀏覽器控制元件添加當前控制元件並註冊js方法呼叫C#程式碼

    1 把WebBrowser瀏覽器外掛新增到當前控制元件集 string url = "a.html"; webBrowser = new ChromiumWebBrowser(url); webBrowser.Dock =

    Android 側滑控制元件DrawableLayoutToolbar結合使用+NavigationView

    側拉布局 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/a

    SwiftJS互動

    swift與js互動: 先看model: @objc protocol VideoDelegate : JSExport { func callSystemCamera(); func exitsCollection(cid: String); } @obj

    解決Android簽名混淆後WebViewJS互動失效的問題

    最近做了個網頁端微信支付的小功能,測試版還好好的,混淆打包後,寫的方法webview無法呼叫,意識到混淆除了問題,於是在網上找了一些大神的解決方案,再根據自己的實際解決過程,列出來一個完整的解決方法。 Android4.2以上版本呼叫js介面需要在方法使用宣告@JavascriptInterfa

    qtjs互動,並在百度地圖上繪製軌跡

    前言: 獲得了照片的GPS資訊後,我們現在要做的就是把GPS資訊傳入JS中,然後通過百度地圖API將軌跡繪製出來。 一:在程式頁面載入地圖 qt5.6及之後取消了QWebkits,轉為使用QWebEngine. 在qt5.6的額ui設計師介面中,並不能直