我写了这个扩展,基本上改变了使用CSS和JS的网站外观。但现在我想为扩展程序添加一些复选框设置,以便用户可以切换网站的功能。
我尝试阅读文档,并在网上搜索。甚至试图寻找我可以逆向工程的演示扩展,但无济于事。
假设我想添加一个“复选框”,将其标题为“侧边栏”并将其设为“关键”值“tg_sidebar”。有人可以解释我如何为此添加一个事件监听器,然后触发一些jquery代码吗?
[我认为这个StackOverflow查询[http://stackoverflow.com/questions/3032945/safari-extension-how-to-respond-to-settings-changes]清楚地说明了一点,但它仍然没有解释太多]
这是有用的一件事。
function numberChanged(event)
{
if(event.key == "tg_sidebar")
alert("Number has changed!");
}
safari.extension.settings.addEventListener("change",numberChanged,false);
[扩展设置窗口的屏幕截图:http://dznr.org/56wi]
现在每当我切换设置时,都会出错。但是,添加或删除CSS类替换该警报功能不起作用。
我也试过使用下面的回答者的代码,但这没有做任何事情。能够查看某些扩展的代码本来是完美的...
还有一件事,如果不清楚的话,设置应该使更改成为永久性的。也就是说,当勾选设置时,它应该在每次加载页面时执行该操作。
答案 0 :(得分:0)
假设您在扩展程序中设置了它。 这很简单。每次在global.html中调用函数时都会调用:
var type = safari.extension.settings.yourSettingsCall;
示例:
var type;
function performCommand(event)
{
if (event.command === "start-event") {
type = safari.extension.settings.tg_sidebar;
}
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("type", type);
}
然后你的inject.js添加这些:
safari.self.addEventListener("message", handleMessage, false);
和
function handleMessage(event){
if (event.name === "type") {
//run code
}
}