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

相关问题