2013-05-19 53 views
1

執行腳本添加我有一個Chrome擴展程序,將在「身體」 綁定 mousedown事件偵聽器點擊的瀏覽器操作時。當再次點擊瀏覽器動作時,它會解除mousedown事件解除綁定Chrome擴展:解除綁定事件監聽器通過對飛

但由於某些原因,即使日誌中說明代碼已執行,解除綁定也不起作用。我嘗試過bind()/ unbind()方法也無濟於事。

任何幫助表示讚賞。謝謝!

的manifest.json

{ 
    "name": "My Extension", 
    "description": "View Font Info", 
    "manifest_version": 2, 
    "version": "1", 
    "permissions": ["tabs", "http://*/*", "https://*/*"], 

    "browser_action": { 
    "default_icon": "f.png" 
    }, 

    "background": { 
    "scripts": ["background.js"] 
    } 
} 

background.js

var toggle = false; 
chrome.browserAction.onClicked.addListener(function(tab) { 
    toggle = !toggle; 
    if(toggle){ 
    chrome.browserAction.setIcon({path: "f.png", tabId:tab.id}); 

    chrome.tabs.executeScript(tab.id, {file:"jquery.js"}, function(){ 
     chrome.tabs.executeScript(tab.id, {file: "on.js"}); 
    }); 
    } 
    else{ 
    chrome.browserAction.setIcon({path: "", tabId:tab.id}); 

    chrome.tabs.executeScript(tab.id, {file:"jquery.js"}, function(){ 
     chrome.tabs.executeScript(tab.id, {file: "off.js"}); 
    }); 
    } 
}); 

on.js(腳本結合事件)

console.log("On"); 
$("body").on('mousedown.custom', function(e){ 
    e.preventDefault(); 
    // do something... 
}); 

off.js(腳本解除綁定事件)

console.log('off'); 
$("body").off('mousedown.custom'); 

回答

1

執行整個jQuery庫上點擊鼠標似乎是多餘的給我。它也可以解釋你的問題(因爲你在開啓和關閉時都會這樣做)。嘗試加載&在click事件處理程序之外執行jQuery,或者至少確保它不會運行兩次。

此外,您與內容腳本進行通信的方式並不理想。你不需要不同的文件,只需使用message passing

background.js

var isjQueryLoaded = {}; 

function executeAfterjQuery(tabId, fn) { 
    if (isjQueryLoaded[tabId]) { 
     fn(); 
    } else { 
     isjQueryLoaded[tabId] = true; 
     chrome.tabs.executeScript(tabId, { file:"jquery.js" }, fn); 
    } 
} 

var toggle = false; 

chrome.browserAction.onClicked.addListener(function (tab) { 
    toggle = !toggle; 
    var path = toggle ? "f.png" : ""; 
    var state = toggle ? "on" : "off"; 
    chrome.browserAction.setIcon({ path: path, tabId:tab.id }); 
    executeAfterjQuery(tab.id, function() { 
    chrome.tabs.sendMessage(tab.id, { state: state }); 
    }); 
}); 

的script.js

function on() { 
    // ... 
} 

function off() { 
    // ... 
} 

chrome.extension.onMessage.addListener(
    function (message, sender, sendResponse) { 
    (message.state == "on") ? on() : off(); 
    }); 
+1

非常感謝,響應非常全面。順便說一句,我不得不改變chrome.tabs.sendMessage()來使它工作。 –

+0

是的,謝謝。 – galambalazs