2

我第一次開發Chrome擴展,並且我有一個內容腳本,每次單擊擴展圖標時我都會觸發,然後在再次單擊圖標時將其關閉,依此類推。我想知道有沒有人可以幫助我?以下是我到目前爲止的代碼。將Google Chrome擴展程序「關閉」和「打開」?

manifest.json的

{ 
"manifest_version": 2, 

"name": "ROTATE", 
"description": "This extension will do unspeakable deeds of great importance.", 
"version": "1.0", 
"browser_action": { }, 

"icons": { "16": "icon16.png", 
      "48": "icon48.png", 
      "128": "icon128.png" 
}, 

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

    "content_scripts": [ 
    { 
    "matches": ["<all_urls>"], 
    "js": ["content.js"] 
    } 
    ], 

"permissions": 
    ["activeTab"] 
    } 

content.js

['', '-ms-', '-webkit-', '-o-', '-moz-'].map(function(prefix){ 
Array.prototype.slice.call(document.querySelectorAll('div,p,span,img,a,body')).map(function(el){ 
    el.style[prefix + 'transform'] = 'rotate(' + (Math.floor(Math.random() * 10) - 1) + 'deg)'; 
    }); 
}); 

background.js

(我知道有一個更好的方式來做到這一點,使用信息但我無法弄清楚,再加上,這實際上是不會將頁面恢復到正常狀態。)

r toggle = false; 
    chrome.browserAction.onClicked.addListener(function(tab) { 
    toggle = !toggle; 

if(toggle){ 
    chrome.tabs.executeScript(tab.id, {file:"content.js"}); 
} 
else{ 
    chrome.tabs.return; 
} 
}); 

我將不勝感激任何形式的幫助。謝謝!

編輯:仍歡迎任何反饋!謝謝!

回答

0

變化量最少將有將撤消一切由第一內容腳本做了第二內容腳本:

el.style[prefix+'transform'] = 'rotate(0deg)'; 

不過,如果你點擊按鈕多次,你已經注入幾次相同的代碼,我的大腦對所有事情的優先級都感到困惑。

消息傳遞方法可能會更好。我將做的主要改變是將toggle移動到內容腳本中,以便您可以在兩個單獨的選項卡中執行此操作(這也會將狀態從背景頁面移出,因此您可以將其轉換爲事件頁面)。你的內容腳本將結束是:

var toggle = false; 
chrome.runtime.onMessage.addListener(function() { 
    toggle = ! toggle; 
    Array.prototype.forEach.call(document.querySelectorAll('div,p,span,img,a,body'),function(el) { 
    el.style.transform = 'rotate(' + (toggle?(Math.floor(Math.random() * 10) - 1):0) + 'deg)'; 
    }); 
}); 

和你的背景劇本,簡直是:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.sendMessage(tab.id,{}); 
}); 

最後說明:你知道它的瀏覽器,所以你只需要一個轉換前綴(我認爲空白一)。 Array.prototype.map的函數參數應返回一些內容;既然你沒有返回任何東西,我用Array.prototype.forEach。事實證明,如果你打電話mapforEach反正你不需要slice

最終結果是: rotated picture

+0

我想你的消息傳遞方式,它似乎並沒有工作... – ooohfff

+0

@ooohfff我在代碼中的輕微錯字。除此之外,它對我來說很好。你能澄清「它似乎不工作」? – Teepeemm

+0

你是對的,我發現並修復了你的錯字,現在它能正常工作。謝謝! – ooohfff

相關問題