質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

412閲覧

エディタに記載された文字を取得できない

syen2501

総合スコア38

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2019/05/26 16:03

typescriptでテキストに出力された文字を取得するプログラムを書いているのですが、
実行できずに困っています。参考にしたのがjavascriptのプログラムなので、
どこか間違っている可能性があるのですが、教えて頂ければ幸いです。
宜しくお願い致します。

<参考にしたサイト>
・テキストが選択・ドラッグされたときに、選択された文章を取得する方法https://qiita.com/uuuno/items/5a215d9bfeabec8adbc3

・Visual Studio Codeの拡張機能をTypeScriptで作る方法
https://clickan.click/vsc-ext/

Typescript

1import * as $ from "jquery"; 2$('body').on('mouseup', function(e){ //mouseupでイベント発火 3 var selectedStr; 4 if(window.getSelection){ //selectionオブジェクト取得 5 selectedStr = window.getSelection().toString(); //文章取得 6 if(selectedStr !== '' && selectedStr !== '\n'){ //文章チェック 7 console.log(selectedStr); 8 } 9 } 10 });

実行結果
イメージ説明

原因としては、package.jsonでpublisherの名前がないからかなと思っているので、
一応、package.jsonのコードを載せておきます。

package.json

1 2{ 3 "name": "highlight", 4 "displayName": "highlight", 5 "description": "", 6 "version": "0.0.1", 7 "engines": { 8 "vscode": "^1.34.0" 9 }, 10 "categories": [ 11 "Other" 12 ], 13 "activationEvents": [ 14 "*" 15 ], 16 "main": "./out/sample", 17 "contributes": { 18 "commands": [ 19 { 20 "command": "extension.helloWorld", 21 "title": "Hello World" 22 } 23 ] 24 }, 25 "scripts": { 26 "vscode:prepublish": "npm run compile", 27 "compile": "tsc -p ./", 28 "watch": "tsc -watch -p ./", 29 "postinstall": "node ./node_modules/vscode/bin/install", 30 "test": "npm run compile && node ./node_modules/vscode/bin/test", 31 "tsc": "tsc" 32 }, 33 "devDependencies": { 34 "@types/mocha": "^2.2.42", 35 "@types/node": "^8.10.48", 36 "jquery": "^3.4.1", 37 "js-yaml": "^3.13.1", 38 "tar": "^4.4.8", 39 "tslint": "^5.8.0", 40 "typescript": "^2.9.2", 41 "vscode": "^1.1.34" 42 }, 43 "dependencies": { 44 "@types/jquery": "^3.3.29", 45 "missing": "0.0.1", 46 "module.js": "^2.2.4", 47 "requirejs": "^2.3.6", 48 "tsd": "^0.7.3", 49 "yarn": "^1.16.0" 50 } 51}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

jQuery が window.document にアクセスできないためにエラーが出ています。今回はそこで実行が止まっていますが、先に進んだとしても window.getSelection() がエラーを出すはずです。

VS Code の extension は DOM へのアクセスが許可されていないため、これらを使うことができません。 HTML ドキュメントの操作を解説したサイトはほぼ参考にならないと考えていいでしょう。 VS Code のエディタを操作するには専用の API を使います: VS Code API

選択範囲が変化したイベントに反応して選択文字列を取得するにはこう書けばいいと思います:

js

1const disposable = vscode.window.onDidChangeTextEditorSelection(event => { 2 if (event.textEditor.selection.isEmpty) { 3 // カーソルを移動するとカーソルの位置で空の選択範囲が変化したイベントが発生する。空なら無視する。 4 return 5 } 6 const str = event.textEditor.document.getText(event.textEditor.selection) 7}) 8context.subscriptions.push(disposable)

投稿2019/06/04 05:24

編集2019/06/04 05:52
uasi

総合スコア93

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syen2501

2019/06/08 15:41

返信が遅くなり申し訳ありません。教えていただきありがとうございます。 typescriptで上記のコードを実行しようとすると、 Property 'subscriptions' does not exist on type 'IContextDefinition'. というエラーが起こるのですが、 これはtypescriptでも動作出来るのでしょうか? 初心者なので教えて頂ければ幸いです。よろしくお願い致します。
syen2501

2019/06/08 15:59

javascriptでこのプログラムを動かそうとすると「context is not defined.」と言われてしまいます。 contextは何か予め宣言か何かしなければいけませんか? 何度も申し訳ありませんが宜しくお願い致します。
uasi

2019/06/09 11:35

参考になさったページの手順に従って拡張機能を作ると、 src/extension.ts の中にあらかじめコードが書かれていて、そこに `export function activate(context: vscode.ExtensionContext) { ... }` があると思います。この関数は VS Code が拡張機能を読み込んだときに呼び出されるもので、引数で `context` が渡されます。回答のコードは activate 関数の中に書いてください。
syen2501

2019/06/10 15:00

返信ありがとうございます。 もう一つだけお聞きしたいことがあるのですが、ドラッグした文章は コード内の「str」に格納され、それをconsole.logでコンソール上に表示できるようになると考えているのですが、表示されません。 かなり初歩的なことを聞くのですが、どのようにしたらドラッグした文章を取得できますでしょうか?
uasi

2019/06/13 05:11

拡張の中で `console.log` を呼んだ場合、その拡張をデバッグ実行中であれば、出力はデバッガ側の VS Code の Debug Console に表示されます。 単に選択した文字列を見てみたいのなら `vscode.window.showInformationMessage(str);` とすれば VS Code の右下にポップアップ表示されます。
syen2501

2019/06/13 05:52

返信ありがとうございます。 また分からないことがあれば、お聞きしたいと思います。
uasi

2019/06/14 08:22

追加で質問される場合は VS Code の拡張に関する質問だと明確に書いたほうが答えを得やすいと思いますよ。ひとくちに TypeScript といっても一般的な web アプリケーションと VS Code 拡張とでは事情がまるで違います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問