0

chrome.browserAction.onClicked.addListenerをクリックすることなくこのコードを実行したいと思います。これはどうすればいいですか?拡張ボタンをクリックせずにこのコードを実行するにはどうすればよいですか?

これはコードです:

var ToggleJSApplication = { 

    triggerWin: null, 
    urlPattern: 'http://*', 

    init: function() { 
    var self = this; 
    self.updateIcon(function() { 
     chrome.browserAction.onClicked.addListener(self.toggleState.bind(self)); 
     chrome.windows.onFocusChanged.addListener(self.onWinFocusChanged.bind(self)); 
    }); 
    }, 

    getState: function(incognito, callback) { 
    var self = this, 
     data = { 
      'primaryUrl': self.urlPattern, 
      'incognito': incognito || false 
     }; 

    chrome.contentSettings.javascript.get(data, function(state) { 
     state.enabled = (state.setting === 'allow'); 
     if (typeof callback === 'function') callback(state); 
    }); 
    }, 

    setState: function(incognito, enabled, callback) { 
    var self = this, 
     data = { 
      'primaryPattern': '<all_urls>', 
      'setting': (enabled) ? 'allow' : 'block', 
      'scope': (incognito === true) ? 'incognito_session_only' : 'regular' 
     }; 

    chrome.contentSettings.javascript.set(data, function() { 
     self.updateIcon(); 
     if (typeof callback === 'function') callback(); 
    }); 
    }, 

    toggleState: function() { 
    var self = this; 
    chrome.windows.getCurrent(function(win) { 
     self.triggerWin = win; 
     self.getState(win.incognito, function(state) { 
     self.setState(win.incognito, !state.enabled, function() { 
      self.reloadCurrentTab(); 
     }); 
     }); 
    }); 
    }, 

    onWinFocusChanged: function() { 
    var self = this; 
    chrome.windows.getCurrent(function(win) { 
     self.triggerWin = win; 
     self.updateIcon(); 
    }); 
    }, 

    reloadCurrentTab: function() { 
    chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { 
     var tab = tabs[0]; 
     chrome.tabs.duplicate(tab.id); 
     chrome.tabs.remove(tab.id); 
    }); 
    }, 

    updateIcon: function(callback) { 
    var self = this, 
     incognito = (self.triggerWin && self.triggerWin.incognito) || false; 

    self.getState(incognito, function(state) { 
     if (state.enabled) { 
     chrome.browserAction.setIcon({path: 'icons/38-on.png'}); 
     chrome.browserAction.setTitle({title: 'JavaScript is enabled'}); 
     } 
     else { 
     chrome.browserAction.setIcon({path: 'icons/38-off.png'}); 
     chrome.browserAction.setTitle({title: 'JavaScript is disabled'}); 
     } 

     if (typeof callback === 'function') callback(); 
    }); 
    } 

}; 

ToggleJSApplication.init(); 

私はすでに、コンテキストメニューのを使用してみましたが、私は失敗しました。回避策はありますか?

+0

をブラウザのアクションはちょうど 'ToggleJSApplication.toggleStateを()'を実行をクリックするコンテンツスクリプトは、のような単純なことができます。ブラウザアクションをクリックせずにコードを実行すると、ToggleJSApplication.toggleState();でスクリプトを終了することになります。私はあなたがもっと複​​雑なことをしたいと思うが、それは私には分かりません。どのような状況であなたのスクリプトを実行したいですか? – Teepeemm

+0

@Teepeemm基本的にボタンをクリックすると上記のコードがすべて実行されます。 –

+0

@Teepeemm私はあなたのToggleJSApplication.toggStState()を試しました。それは動作します! ty。あなたはそれを正しい答えとしてマークできるように、答えにそれを入力してください。 –

答えて

0

あなたは、スクリプトをトリガーするために既存のウェブページ内のボタンをクリックしたいと述べました。ウェブページとやりとりするには、content scriptを使用する必要があります。これは、message passingでバックグラウンドスクリプトとやり取りする必要があります。次に、あなたのバックグラウンドスクリプトで、あなたが追加することができます

document.getElementById('buttonId').addEventListener('click',sendMessage); 
// or $('#buttonId').click(sendMessage); 

function sendMessage() { 
    chrome.runtime.sendMessage({'message':'buttonClicked'}); 
} 

chrome.runtime.onMessage.addListener(messageListener); 

function messageListener(request) { 
    if (request.message === 'buttonClicked') { 
     ToggleJSApplication.toggleState(); 
    } 
} 
関連する問題