teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードを追加しました。

2017/12/17 03:24

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,5 @@
1
+ すみません嘘書きました。
2
+
1
3
  方法①についてこうすれば出来ます。
2
4
  manifest.json:
3
5
  ```JSON
@@ -18,5 +20,38 @@
18
20
  });
19
21
  ```
20
22
  そもそもbackground.jsはウィンドウと隔離した状態で実行されているため、
21
- alert()しても表示されることはありません。
23
+ ~~alert()しても表示されることはありません。~~キーボードイベントはキャッチ出来ません。
22
- 逆に上記のスクリプトはコンテンツの上で実行されるため、予期せぬ動作を生む可能性があります。
24
+ 逆に上記のスクリプトはコンテンツの上で実行されるため、予期せぬ動作を生む可能性があります。
25
+
26
+ 方法①の改良としては、content scriptとbackground.jsの通信を利用することになります。
27
+ manifest.json:
28
+ ```JSON
29
+ "background": {
30
+ "scripts": ["background.js"],
31
+ "persistent": false
32
+ },
33
+ "content_scripts": [
34
+ {
35
+ "matches": ["<all_urls>"],
36
+ "js": ["keydown_send.js"]
37
+ }
38
+ ]
39
+ ```
40
+ keydown_send.js:
41
+ ```JavaScript
42
+ window.addEventListener("keydown", function(e){
43
+ //Ctrl+Entrが押されたとき、backgroundページにメッセージを送る
44
+ if(e.ctrlKey && e.keyCode === 13){
45
+ chrome.runtime.sendMessage({command: "Ctrl+Enter"});
46
+ }
47
+ });
48
+ ```
49
+ background.js:
50
+ ```JavaScript
51
+ chrome.runtime.onMessage.addListener(function(message){
52
+ if(message.command === "Ctrl+Enter"){
53
+ alert();
54
+ }
55
+ });
56
+ ```
57
+ 方法②ではEnterの使用が許可されていないため難しいと思います。