あなたが理解していない場合は、すべてのオンボード通信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){ IF(typeof演算データ=== ' 列' ){ データ = {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の通信。