3

我想獲得一個成功注入的內容腳本,以向注入的基於AngularJS的Chrome擴展發送消息。將消息從內容腳本傳遞到基於Angular JS的Chrome擴展

注入控制器方法是這樣的:

$scope.selectElement = function() { 
    // Close the extension window 
    window.close(); 

    window.chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     console.log(sender.tab ? 
        "from a content script:" + sender.tab.url : 
        "from the extension"); 
     if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    } 
); 

    // Send content script to web page 
    window.chrome.tabs.executeScript(null, { file: 'app/bower_components/jquery/jquery.js' }, function() { 
    window.chrome.tabs.executeScript(null, { file: 'app/scripts/libs/dom_selector.js' }); 
    }); 
}; 

注入腳本調用一旦網頁被點擊以下:

$(document).click(function(event) { 
    console.log($(event.target)); 
    chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response); 
    }); 
}); 

這火(出現在控制檯的第一個日誌消息) ,但第二條日誌消息僅打印undefined

我想也許window.close()可能是問題,但window.chrome.tabs.executeScript調用工作正常,所以我不知道爲什麼事件監聽器不會觸發。它在錯誤的地方嗎?我有一種感覺,因爲我應該只是在某個地方宣佈它,對吧?如果它在像這樣的控制器中,每次運行該方法時都會設置,然後每個偵聽器都會響應一個事件,導致事件響應被多次發送。它是否正確?

對此有何AngularJS指導,深受歡迎...

回答

2

這是打破了它的window.close()。令人討厭的是,因爲我需要關閉彈出窗口,所以用戶可以在屏幕上選擇任何HTML元素。但我可以證實,刪除該行允許我得到來自聽衆的迴應。

相關問題