2017-11-13 8 views
0

Firefoxアドオンを作成しようとしていますが、特定のイベントが発生したときにブラウザウィンドウを最前面に表示しようとしています。Web Extensionを使用してFirefoxウィンドウにフォーカスを設定する方法

これが私のマニフェストです:

{ 
    "manifest_version": 2, 
    "name": "Test Extension", 
    "version": "1.0", 
    "description": "Test browser extension", 

    "content_scripts": [{ 
    "matches": ["http://*/*", "https://*/*"], 
    "js": ["content.js"] 
    }], 

    "background": { 
    "scripts": ["background.js"], 
    "persistent": true 
    }, 

    "permissions": [ 
    "notifications", 
    "activeTab" 
    ] 
} 

Content.js:

'use strict'; 

document.addEventListener('newOrderEvent', function() { 
    console.log('New Order event received'); 
    browser.runtime.sendMessage('new-order-event'); 
}); 

Background.js:

'use strict'; 

var windowId; 

function newOrderListener(message) { 
    if (message === 'new-order-event') { 
    console.log('Received event!'); 
    browser.windows.update(windowId, { 
     drawAttention: true, 
     focused: true, 
     state: 'maximized' 
    }); 
    } 
} 

browser.windows.getCurrent().then(function(window) { 
    windowId = window.id; 
}); 

browser.runtime.onMessage.addListener(newOrderListener); 

newOrderEventは自分のアプリケーションのWebページによって生成され、それは常にです適切な時に呼び出されますが、ブラウザがフォアグラウンドに来ることがありますなぜなら、私は正確になぜそれを理解していません。さらに、background.jsからのコンソール出力はブラウザによって登録されていません。

私は間違っていますか?

注:何をしたいが集中し、それ自体を作るためのタブがある場合、私は、Firefox 52およびWindows 10

+0

1で自身を集中することができますがあります任意のタブ:ときに、あなたはすべての警告を得るのですか拡張機能をインストールしますか? 2:ブラウザコンソール(Ctrl + Shift + J)は、すべてのconsole.logの3を表示します: 'background.js'の' windowId'の使い方が間違っています。まだ指を置くことはできません –

+0

こんにちは、私はいません私は 'Ctrl + Shift + J'コンソールと' console.log() 'コマンドも表示されています... – Felipe

答えて

0

を使用しています、あなたはWINDOWIDが何であるかと誤解されています。 WindowIdは、タブではなくウィンドウのIDになります。設定する方法は、1つの値になります。拡張子がロードされたときの最初のwindowID

background.jsを次その後

function newOrderListener(message, sender) { 
    if (message === 'new-order-event') { 
     console.log('Received event for window %s, tab %s', sender.tab.windowId, sender.tab.id); 
     browser.windows.update(sender.tab.windowId, { 
      drawAttention: true, 
      focused: true, 
      state: 'maximized'} 
     ).then(() => browser.tabs.update(sender.tab.id, { 
      active: true 
     })); 
    } 
} 
browser.runtime.onMessage.addListener(newOrderListener); 

(基本的にはあなたのコード内のすべてのタブで)ロードされたコンテンツスクリプト

document.dispatchEvent(new Event("newOrderEvent")) 
+0

こんにちは、お返事いただきありがとうございます。私は 'windowId'を手に入れることを約束する必要はないのですが、まだ動作していません。時にはブラウザをフォアグラウンドにしたり、ブラウザがステータスバーに点滅したりすることもあります。 – Felipe

+0

奇妙、毎回私のために働く –

+0

Hum ...あなたはWindowsを使っていますか? 注:私はアドオンのアドオンを実験しています。ブラウザを「常に上に」設定すると、このコードは私のために働きます... – Felipe

関連する問題