2013-08-04 10 views
5

Przeczytałem dokumentację, ale nadal nie udało mi się jej uruchomić.Funkcja wywoływania Chrome w skryptach treści z background.js

Tu jest mój manifest:

{ 
    "name":"app", 
    "version":"0.1", 
    "manifest_version":2, 
    "description":"app", 
    "background":{ 
     "scripts":[ 
      "scripts/modernizr.min.js", 
      "scripts/background.js" 
      ], 
     "persistent": false 
    }, 
    "content_scripts": [ 
     { 
     "matches": ["https://*/*", "http://*/*"], 
     "js": ["scripts/content.js"], 
     "run_at": "document_end" 
     } 
    ], 
    "permissions":[ 
     "contextMenus", 
     "tabs", 
     "http://*/*", 
     "https://*/*" 
     ], 
    "icons":{ 
     "16":"images/icon_16.png", 
     "128":"images/icon_128.png" 
    } 
} 

Mam funkcję w content.js zwanych "myFunc". W background.js mam funkcję "myHandler", która jest wywoływana przez detektor contextMenus.onClicked. Chcę zadzwonić do myFunc z mojegoHandler. Próbowałem używać tabs.executeScript i tabs.query, ale nie mogę uzyskać wywołania funkcji. Czy ktoś może mi wyjaśnić, w jaki sposób mam pozwolić background.js wywołać funkcję w content.js?

Odpowiedz

9

Aby wywołać funkcję w skrypcie treści ze strony w tle, najpierw musisz znać identyfikator karty. Zdarzenie contextMenus.onClicked ma parametr tab zawierający ten identyfikator. Następnie użyj message passing, aby to zrobić.

Na przykład, na stronie tle:

chrome.contextMenus.onClicked.addListener(function(info, tab) { 
    if (tab) 
    chrome.tabs.sendMessage(tab.id, {args: ...}, function(response) { 
     // ... 
    }); 
}); 

w skrypcie Treść:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    sendResponse(myFunc(request.args)); 
}); 
+2

chcesz dodać, że ten API zmieniała w ciągu ostatnich 2 lat, a to, jak wygląda teraz . – vittore

+0

@vittore Ah, to może wyjaśnić, dlaczego to, co próbowałem, nie działało. – Lebowski156

Powiązane problemy