我已经把它缩小到点击设置,然后取消或ok(还没有代码处理设置事件),然后尝试点击dock按钮,可以预见地杀死小工具控件。到目前为止,我已经尝试了评论中的所有建议,包括设置类,我有一种感觉会把事情搞砸。
真正让我烦恼的是,它的行为方式是相同的,无论参数馈送到endTransition方法或是否end和beginTrans方法甚至在那里。绝对不需要整整5秒的转换时间。它之前被设为1。还是没有区别。我在文档中找不到关于这些transitionTypes的任何信息。
HTML文件:<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Unicode" />
<title>Time Tracker Gadget</title>
<link type="text/css" rel="stylesheet" media="screen" href="css/main.css" />
</head>
<body id="gadget">
<!-- pure HTML here, no linked scripts, inline JS, or styles -->
<script type="text/jscript" src="js/main.js"></script>
</body>
</html>
JS文件:
System.Gadget.settingsUI = "settings.html";
var docked = {width:"161px", height:"110px"},
undocked = {width:"295px", height:"390px"},
gadgetEl = document.getElementById('gadget'),
addStyles = function(el,newStyles){
var elStyle = el.style;
for(var x in newStyles){ elStyle[x] = newStyles[x]; }
},
swapDockStates = function(){
System.Gadget.beginTransition();
if(System.Gadget.docked){
addStyles(gadgetEl,undocked);
}
else {
addStyles(gadgetEl,docked);
}
System.Gadget.endTransition(System.Gadget.TransitionType.morph, 5);
};
System.Gadget.onDock = swapDockStates;
System.Gadget.onUndock = swapDockStates;
XML文件:<?xml version="1.0" encoding="utf-8" ?>
<gadget>
<name>BigTime Gadget</name>
<version>1.0.0.0</version>
<author name="BigTime Software">
<info url="www.bigtime.net" />
</author>
<copyright>© BigTime Software Inc.</copyright>
<description>Time tracking gadget</description>
<hosts>
<host name="sidebar">
<base type="HTML" apiVersion="1.0.0" src="bigtime.html" />
<permissions>Full</permissions>
<platform minPlatformVersion="1.0" />
</host>
</hosts>
</gadget>
呃…多么令人尴尬。不要将同一个JS文件与设置文件和小工具文件中的事件处理程序和设置位置链接在一起。这就解释了一些事物的明显行为,不管它们是否存在。我希望有一个更深入的解释在全局范围内发生了什么。
你必须改变body的高度来避免这个问题:
swapDockStates = function(){
System.Gadget.beginTransition();
if(System.Gadget.docked){
document.body.style.height = '110px';
addStyles(gadgetEl,undocked);
}
else {
document.body.style.height = '390px';
addStyles(gadgetEl,docked);
}
System.Gadget.endTransition(System.Gadget.TransitionType.morph, 5);
};