Chrome のタブ ID へのアクセスに問題があります。取得できますが、拡張機能の内部に残り、拡張機能の外部でキーボードイベントを記録できたにもかかわらず、拡張機能の外部では使用できません。
これが私がやろうとしていることです:
- ユーザーがタブに移動し、「キャプチャ」ボタンで tabId を取得します
- tabId はグローバル変数として保存されます
- その後、ユーザーはブラウザ内の他のタブに移動でき、そこからキーの組み合わせを使用して、CTRL + SHIFT を同時に押すことで、キャプチャしたタブをいつでもリロードできます。
extension.html
<!DOCTYPE html>
<html>
<head>
<title>Extension</title>
<style>
body {
min-width: 357px;
overflow-x: hidden;
}
</style>
<p>Step 1. Navigate to tab you want to refresh and click the 'capture' button</p>
<button type="button" id="capture">Capture!</button>
<p id="page"></p>
<p>Step 2. Now you can reload that tab from anywhere by pressing CTRL+SHIFT simultaneously</p>
</div>
<script src="contentscript.js"></script>
</head>
<body>
</body>
</html>
マニフェスト.json
{
"manifest_version": 2,
"name": "Extension",
"description": "This extension allows you to trigger page refresh on key combinations from anywhere",
"version": "1.0",
"content_scripts": [
{
"matches": ["http://*/*","https://*/*"],
"run_at": "document_end",
"js": ["contentscript.js"]
}
],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "extension.html"
},
"web_accessible_resources": ["script.js"],
"permissions": [
"tabs"
],
}
contentscript.js
var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
(document.head||document.documentElement).appendChild(s);
s.parentNode.removeChild(s);
script.js
'use strict';
var isCtrl = false;
var tabId = 0;
document.onkeyup=function(e){
if(e.which === 17) {
isCtrl=false;
}
};
document.onkeydown=function(e){
if(e.which === 17) {
isCtrl=true;
}
if(e.which === 16 && isCtrl === true) {
/* the code below will execute when CTRL + SHIFT are pressed */
/* end of code */
return false;
}
};
document.getElementById('capture').onclick = function(){
chrome.tabs.getSelected(null, function(tab) {
tabId = tab.id;
document.getElementById('page').innerText = tab.id;
});
};
これが解決策になると思いましたが、うまくいきませんでした:
/* the code below will execute when CTRL + SHIFT are pressed */
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.reload(tabId);
});
/* end of code */
グローバル変数として持つのは無意味に思えるので、メッセージパッシングが解決策になるはずだvar tabId = 0;
と思ったのですが、それに関する問題は、それをどのように実装すべきか理解していないことです。
ID に基づいてどこからでもタブを更新する方法に関する提案はありますか?