VsCodeプラグインのNode.jsとの双方向通信

あなたが理解していない場合は、すべてのオンボード通信VsCodeの最初に、私はこのブログを参照することができ、プラグインの初期通信VsCodeのプラグイン開発

あなたはより多くの例が必要な場合は、参照することができVsCodeプラグイン開発

今、私たちは新たな需要を持っている、VsCodeは相互作用を達成するためのjQueryの道/または導入や背景によっていくつかのフロントエンドの通信フレームワークをプラグインすることができます。しかし、以前の需要のために、需要の説明:ローカルディスクは、特定のフォルダ内のユーザーがログインした後に作成されます。通常、通常、バックエンドの言語、その後、特定のフォルダを作成したいです。そして、私はこのプラグインを書いていたのJavaScriptファイルを読み書きすることはできません、JavaScriptを使用することで、当然のことながら、一部の人々はあなたがActiveXObjectのを使用することができると言うかもしれないが、このActiveXObjectのはその制限があり、それが唯一のIEブラウザをサポートすることができますが、サポートすることはできませんこうしたGoogleのChromeとFirefoxのブラウザ広い汎用性として。

この需要に対処するために、私はこの問題を解決するためのNode.js組み合わせることにしました。

まず明確にする、vscodeプラグイン開発で、それは通常、局所的需要のデバッグには、JavaScriptや活字体を使用しているかどうか、あなたが対応するライブラリ、ライブラリ管理、通常NPMまたは糸をインストールする必要があります。したがって、我々は知っているだろう、我々は直接プラグインでのNode.jsに関連するコードを書くことができます。

次の手順で実装要件は次のとおりです。

導入vscode関連ライブラリー(あなたは、メッセージングのコマンドを呼び出すようにしたいので)

CONSTのtestMode =  ; // エラーを開くことができませんでしたブラウザで真である
 // 唯一の差vscodeのWebViewのページと共通のページ:acquireVsCodeApi法よりも
constの VSCode =のtestMode?{}:acquireVsCodeApi();
 constのコールバック=を{ }; 

/ * * 
 * vscodeネイティブAPIを呼び出し
 、データが類似@param {CMDであってもよい*: 'XXX'、PARAM1 'XXX'}、 それは直接CMD文字列であってもよい
 * @paramのCBオプションのコールバック関数
 * / 
機能callVscode(データ、CB){ 
    IFtypeof演算データ=== ' ' ){ 
        データ = {CMD:データ}; 
    } 
    IF (CB){
        // タイムスタンプを加えた5ビットの乱数
        CONST CBID Date.now =()+ '' +恐らくMath.round(Math.random()* 100000 ); 
        コールバック[CBID] = CB; 
        data.cbid = CBID; 
    } 
    VSCode .postMessage(データ); 
}

ニュースはNode.jsのに達したとき

vscode.postMessage({ 
    コマンド:' ログイン' 
    テキスト:ニックネーム
})。

すると友人は、その後のNode.js聞いてきますが、それを受信する方法ですか?

module.exportsは= 関数(コンテキスト){ 

    VARの間隔= NULL ;
    するvar i = 0 ;
    VaRのフラッグ= ; 

    context.subscriptions.push(vscode.commands.registerCommand(' extension.demo.showWelcome ' 、関数(URI){ 

        場合(フラグ){
             リターン; 
        } 

        CONSTパネル= vscode.window.createWebviewPanel(
             ' testWelcome '// ビュータイプ
            功能页"// 视图标题
            vscode.ViewColumn.One、// エディタの表示一部
            { 
                enableScripts:trueに// デフォルトでは無効になってJSを有効
            } 
        ); 

        フラグに = trueに

        panel.onDidDispose( 
            () => { 
                フラグに = falseに; 
            }、
            ヌル、context.subscriptions); 
グローバル = { 
            パネル
        }; 

        panel.webview.html = getWebViewContent(文脈、'SRC /ビュー/カスタムのwelcome.html " ); 

        // 创建文件 
        panel.webview.onDidReceiveMessage(メッセージ=> { 

            スイッチ(message.command){ 

                
                ケース ' ログイン' 

                    (message.text、作成真の); 

                    破る; 

                ケース ' 時間' 

                    開始(); 

                    破る; 

                ケース ' showCourseList ' 

                    vscode.commands.executeCommand(' extension.demo.showCourseList " 、message.text); 

                    ブレーク; 

                ケース ' closeTime ' 
                    停止(); 

                    破ります; 

                ケース ' 代わりにthemeColor ' 

                    VARの名前= getTheme(); 

                    panel.webview.postMessage({ 
                        コマンド:' リファクタリング' 
                        テキスト:名
                    })。

                    破ります; 

                ケース ' readToken ' 

                    VARの名前= 入手トークン(); 
                    console.log("------------- ------------------------行くゴーゴーゴーゴーゴーゴー:" + )の名前を、
                    panel.webview.postMessage({ 
                        コマンド:' checkToken ' 
                        テキスト:名
                    }); 

                    破る;
                 ケース ' storeUserId ' 
                    はconsole.log(" ----------------店舗UserId- ----------------:" + message.text); 

                    storeUserId(message.text); 

                    破る; 

                ケース ' getUserId 'VARのにuserId = getUserID()。

                    console.log(" :---------------- -----------------ユーザーIDを取得します" + ; USERID)

                    panel.webview.postMessage({ 
                        コマンド:' readUserId ' 
                        テキスト:のuserId 
                    })。



                    破ります;
                ケース ' storageToken ' 

                    storeToken(message.text)。

                    破ります;
                ケース ' deleteToken ' 

                    deleteToken(message.text)。

                    破ります;
                ケース ' readUploadFilePath ' 

                    はconsole.log(" ------------------------ readUploadFilePath -----------:" + メッセージ。テキスト); 

                    VaRの含有量= readExtensionFile(message.text)。

                    panel.webview.postMessage({ 
                        コマンド:' uploadConfig ' 
                        テキスト:コンテンツ
                    })。

                    破ります; 

                ケース ' downloadExtensionFile ' 

                      downloadExtensionFile(message.text)。

                    破ります; 


            } 

        }、未定義、context.subscriptions)。




    }))。

message.commandとは、文字を対応する対応するコマンドに応じてケースを取り、対応するコマンドを取得することができます。これは、Node.jsのJavaScriptをフロントエンドとのコミュニケーションです。

 

Node.jsのJavaScriptの通信に応答する方法(呼び出しに相当し、私はあなたを呼び出す、私はあなたにも(答え)に応答する必要がある、と言うことはできません)

JavaScriptの(window.addEventListenerと本質的に同じJavaScriptの遠位のNode.jsにメッセージを送信するメッセージを送信する)などの通信応答コードをNode.jsの

スイッチ(message.command){ 

        ケース ' リファクタリング' 
            はconsole.log(" 自定义背景颜色、カスタマーの背景色:" + message.text)。

            もし(message.text == " " ){ 
                document.body.style.backgroundColor = " #FFFFFF " 
            } { 
                document.body.style.backgroundColor = " #333333 " 
            } 
            ブレーク; 

        ケース " checkToken" 

            はconsole.log(" ------------------- checkToken ----------------------- -----:" + message.text)。

            もし(message.text == nullの || message.text == "" ){ 
                ログイン()
            } { 

                $(" #exit " ).SHOW(); 
                $(" #設定の同期" ).SHOW(); 
                $(" #upload_settings " ).SHOW(); 
                $(" #token ").val(message.text)。
                readUploadFilePath(" D:// 1024Workspace //拡張子// " ); 

            } 

            ブレーク; 

        ケース ' readUserId ' 

            はconsole.log(" ===================== readUserID ================== =======:" + message.text)。

            $(" #userId " ).val(message.text)。
            checkPermissions(message.text)。

            破ります; 

        ケース ' uploadConfig ' 
            はconsole.log("========================アップロードコンフィグ======================:" + message.text); 

            $(" #uploadExtensionContent " ).val(message.text); 

            休憩; 

    } 
});

window.addEventListenerこれは、全体の状況を監視することと同じです。

私たちは、テキストメッセージまたは遠位JavaScriptのJSONデータに対する応答のNode.js message.textを介して取得することができます。

公式上記二つの単語は、以下言っ
たJavaScriptのNode.jsと通信して、(1)
(2)JavaScriptとNode.jsの通信。

おすすめ

転載: www.cnblogs.com/youcong/p/10991826.html