Qt埋め込みIEはJavaScriptとのインタラクションを実現する.

2603 ワード

仕事は同時に埋め込まれたChrome、IEが必要で、IEに比べて、CEFのオープンソースは簡単に多くなりました.IEを起動するのに時間がかかりました.
ポイント記述 qtでjsと クライアントの前に相互に呼び出し、コード資料はウェブサイトによって整理してテストします.
埋め込み呼び出しIEはQT+=を導入する必要があります. axcontainer(具体的な呼び出しIEは省略)
1、qtはjsを呼び出して、この呼び出し方法は比較的に簡単です.
QAxObject *document = ui->axWidget->querySubObject("Document");
if(!document)
    return ;
QAxObject *parentWindow = document->querySubObject("parentWindow");
{
    QAxObject obj(&m_call, this);
    parentWindow->dynamicCall("SaveCppObject (QAxObject*)", obj.asVariant());//   qt     ,           
}
2、jsはqtを呼び出して、現在整理してテストする方法は3つあります.
  • まず、qtを通じてjs方法を呼び出し、IDispatchポインタオブジェクトをjsに保存し、後の参照にすることができます.
  • jsは自動的にqtを呼び出して、通過します. window.external.Get Process ID()方式呼び出し
  • はactiveXを書いて、jsの中で対象を通じて(テストした後に発見して、少し複雑で、このactiveXを登録することを実現しなければならなくて、あるいはqtは自発的にこのactiveXを呼び出します)
  • を呼び出します.
    2.1 qtはjsメソッドを呼び出して、qtを呼び出すことを実現します.
    2.1.1 qt部分の書き方
  • 継承 IDispatchは、主にQuery Interface、GetIDsOfNames、Invokeの3つの方法を実現するために
  • です.
  • は、ポインタをjs
  • に渡すことを実現するために、(1)を呼び出します.
    2.1.2 js部分の書き方
    var cpp_obj = null;
    //      qt     
    function SaveCppObject(val) {
        cpp_obj = val;
        alert(val);
        val.ShowMessageBox("  ,  Javascript,   ?");
    }
    function test_method2() {
        if (cpp_obj && typeof(cpp_obj) != "undefined") {
            var processId = cpp_obj.GetProcessID();
            alert(processId);
        }
        else {
            alert("cpp_obj     ,  qt     IDispatch   ");
        }
    }
    2.2 jsは積極的にqtを呼び出して、window.external.xx方式で呼び出します.
    2.2.1 qt部分の書き方
  • 継承 IDispatchは、主にQuery Interface、GetIDsOfNames、Invokeの3つの方法を実現するために
  • です.
  • IDocHostUID Handlerを継承します.主に実現のためです. GetExternal方法(目的:jsを継承することにより、jsを捕捉してqtを呼び出すことができる)
  • public QingAggatedを継承し、public IObject Safetyは、セキュリティ認証
  • をバイパスしたという.
    2.2.2 js部分の書き方
    function test_method1() {
        try {
            alert(window.external.GetProcessID());
        }
        catch (e) {
            alert(e.message);
        }
    }
    サンプルコード:https://download.csdn.net/download/beyond0851/10872345
    参考文献:
    QxWidgetは、ocxコントロールのjs双方向通信を呼び出します.
    https://blog.csdn.net/tianweibooo/article/details/81003188
    CAxHostWindowを継承し、IDocHostUID Handlerコントロールブラウザ画面
    https://www.xuebuyuan.com/1285504.html
    CEF 3開発者シリーズ外編——IEのJSとC++インタラクション
    https://www.cnblogs.com/guolixiucai/p/4957521.html
    ブラウザプログラミングの二IEコントロールとJSインタラクティブ編
    https://blog.csdn.net/river_mu/articale/detail/8692666
    (****)VCとJavaScriptの相互作用(三)——JS呼び出しC++
    https://blog.csdn.net/charlessimonyi/article/details/50984903