2016-09-21 69 views
0

Stackoverflow社區,你好。我在此尋求一些幫助,幫助您瞭解如何使用Google Chrome瀏覽器擴展程序的消息API將"this"the id of "this"一起發送。Chrome擴展|使用Chrome API發送「this」和「this」id值,如消息

相關HTML代碼中使用(popup.html)

<p class="field switch bpos"> 
    <label class="cb-enable" id="id1"><span>yes</span></label> 
    <label class="cb-disable selected"><span>no</span></label> 
    <input type="checkbox" id="checkbox" class="checkbox"> 
</p> 

Listener.js(外部腳本)(在popup.html的放置腳本標記內)

$(".cb-enable").click(function() { 
chrome.tabs.executeScript(null, {file:"script.js"}); 
}); 

的script.js(從{file:「script.js」})運行

function check(){ 
if ($(this).is('#id1')) {function1(); } 
else if ($(this).is('#id2')) {function2(); } 
else{alert("id not found");} 
} 
check(); 

對於Chrome擴展API相對較新,使用file和s使用消息傳遞API將信息從一個腳本結束到另一個腳本讓我感到相當困惑,並希望你們中的一個能夠幫助我確定"this"the ID value of this是如何從一個文件發送到另一個文件的。

如果任何人都可以幫助即使在這個具體要求中的最小的,你的幫助將不可思議地讚賞。

回答

1

首先,您必須記住,從注入的script.js訪問的popup.html和DOM樹的DOM樹是不同的。所以,如果你將jQuery事件傳遞給script.js,它將無法正常工作。而不是它,你可以傳遞目標id到你的script.js。

其次,爲什麼每次點擊都會將script.js注入頁面?你可以做一次。然後發送消息到頁面。

第三,你在你的Listener.js,這可能是沒有準備好與DOM的工作,我建議將其綁定到的document.ready:

這可能是這樣的:

Listener.js

$(document).ready(function(){ 
    chrome.tabs.executeScript(null, {file:"script.js"}); 
    $(".cb-enable").click(function(evt) { 
     target=$(this).attr("id") 
     chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
      chrome.tabs.sendMessage(tabs[0].id, target, function(response) { 
      }); 
     }); 
    }); 
}); 

的script.js

if(!window.init) 
{ 
    window.init=true 
    chrome.runtime.onMessage.addListener(function(msg){ 
    //do something with msg contains id of clicked button 
    }); 
} 

四,你在script.js中使用jQuery,你是否將它注入爲content_script?如果沒有,您需要通過添加了jQuery插件,並在清單注射作爲content_script做到這一點:

... 
    "content_scripts": [ 
    { 
     "js": [ 
     "jquery.js" 
     ], 
     "matches": [ 
     "http://*/*","https://*/*" 
     ] 
    } 
    ], 
    ... 
+0

你做出非常正確的觀點,我知道它可能看起來與建築有點奇怪。請原諒我對你的問題的瞭解,但是一旦點擊了具有.cb-enable特定類的元素,它是否會發送要在if語句中使用的「this」id?也感謝你相當快速的回答。 – Fearcustard

+0

是的,我附上的代碼 - msg var,在您的script.js中收到的將包含您在popup.html中使用class .cb-enable單擊的元素的id。但只有ID,不完整的實體。 – MobDev

+0

你可以在你的script.js中做這樣的事情:'if(msg ==「id1」){...}' – MobDev