2016-12-05 1 views
0

내 콘텐츠 스크립트가 모든 Chrome API 도구를 사용할 수 없기 때문에 내 콘텐츠 스크립트에서 내 백그라운드 스크립트로 메시지를 보내고 있습니다. 받은 때, 배경 스크립트는 내가 만든 html 파일을 포함하는 새 탭을 열 예정입니다.chrome.tabs.create not working

이 콘텐츠 스크립트에서 메시지를 보내는 ...

chrome.runtime.sendMessage({permission: true}, function(response) { 
     console.log(response.access); 
}); 

이 내 배경 스크립트에서 메시지를 수신하는 코드입니다 ...

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.permission == true) { 
     chrome.tabs.create({'url': chrome.extension.getURL('./src/permission.html')}, function(tab) { 
      sendResponse({access: "yes"}); 
     }); 
    } 
}); 

메시지를 수신, 나는 이미 그것을 테스트했다. 하지만 다음 코드를 추가하면 ...

chrome.tabs.create({'url': chrome.extension.getURL('./src/permission.html')}, function(tab) { 
...etc 

응답을받지 못했다는 오류가 발생합니다. 뭔가 의미가 내 chrome.tabs.create 안에 침입 했음에 틀림 없다. 왜 깨지는거야?

permission.html 경로는 백그라운드 스크립트와 관련이 있습니다.

내가 원하는 것은 메시지를 수신 할 때 새 탭을 만드는 것입니다.

답변

1

이것이 영향을 미치지 만 콘텐츠 스크립트와 백그라운드 스크립트가 비동기 적으로 통신하기 때문에 확실하지 않은 경우 sendResponse 콜백을 사용하려면 onMessage 익명 기능이 끝날 때 return true;이 필요합니다. 이 문제를 해결할 수 있는지를

Chrome onMessage return true

다시
chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.permission == true) { 
     chrome.tabs.create({'url': chrome.extension.getURL('./src/permission.html')}, function(tab) { 
      sendResponse({access: "yes"}); 
     }); 
    } 
    return true; //to tell the content script to look out for sendResponse 
}); 

는 잘 모르겠지만, 상관없이, sendResponse를 사용하여 응답은 청취자의 말에 진정한 반환하지 않고 작동하지 않습니다

또한 BTW chome.extension.getURL()에는 점 슬래시가 필요하지 않으므로 chrome.extension.getURL('src/permission.html')으로 충분해야합니다.

방금 ​​탭이 열립니다 있는지 확인하기 위해 (도트 슬래시와 함께 또는없이)
chrome.tabs.create({'url': chrome.extension.getURL('src/permission.html')}); 

를 실행 시도?

+0

불행히도 그러한 해결책이 도움이되지 않았습니다. 탭이 여전히 열리지 않습니다. – Bolboa

+0

명령을 실행 해 볼 수 있습니까? chrome : // extensions로 이동 한 다음 (개발자 모드가 선택되어 있는지 확인) 확장 프로그램의 '배경 페이지'를 클릭하십시오. 개발자 도구가 열리면 콘솔 탭으로 이동하여'chrome.tabs.create ({ 'url': chrome.extension.getURL ('src/permission.html')}); –