2017-11-13 5 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를 생성하고 항상있다 시간에 맞춰 호출되기도하지만 때로는 브라우저가 전경에오고 그럴 때가 아니라면 나는 그 이유를 정확히 이해하지 못한다. 또한 background.js의 콘솔 출력이 브라우저에 등록되지 않습니다.

내가 뭘 잘못하고 있니?

참고 : 당신이 원하는 것은 집중 자체를 만들 수있는 TAB 인 경우 나 파이어 폭스 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이며, 사용자가 설정하는 방식은 확장자가로드 될 때 첫 번째 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

흠 ... Windows를 사용하고 있습니까? 참고 : 나는 또한 addional addons로 실험 해 왔으며 브라우저를 "항상 위에"설정하면이 코드가 작동합니다 ... – Felipe