2013-08-04 14 views
5

Dokümantasyonu okudum ama yine de bu çalışmayı başaramadım. Ben "myFunc" denilen content.js bir işleve sahipArka plan.js'den içerik komut dosyalarındaki Chrome çağrısı işlevi

{ 
    "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" 
    } 
} 

:

İşte benim olduğu açıktır. Background.js'de, contextMenus.onClicked dinleyicisi tarafından çağrılan bir işlev var "myHandler". MyHandler'dan myFunc'u aramak istiyorum. Tabs.executeScript ve tabs.query kullanmayı denedim, ancak çağrılacak işlevi göremiyorum. Kimse bana background.js'nin content.js'de bir işlevi çağırmasına izin vermem gerektiğini açıklayabilir mi?

cevap

9

Arka plan sayfasındaki içerik komut dosyasında bir işlevi çağırmak için önce sekme kimliğini bilmeniz gerekir. contextMenus.onClicked olayı, bu kimliği içeren bir tab parametresine sahiptir. Daha sonra bunu yapmak için message passing kullanın. içerik komut dosyasında

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

:

arka plan sayfasında Örneğin

,

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

bu API son 2 yılda değiştirdiğini eklemek istiyorsunuz ve bu şu anda nasıl göründüğü . – vittore

+0

@vittore Ah, neden çalıştığımın neden çalışmadığını açıklayabilir. – Lebowski156

İlgili konular