我一直致力于创建Windows桌面小工具。我可以使用document.createElement创建我想要的HTML元素。我可以设置它们的属性,我可以在设置它们之后获取这些属性,但是我做的任何修改文档的操作都完全无声地失败。我根本没有看到任何错误,但小工具不会改变。即使像document.body.innerHTML = "asdf";
这样简单的事情也绝对没有。 IE8中的相同代码完美无缺。我在这里缺少什么?
gadget.xml:
<?xml version="2.0" encoding="utf-8" ?>
<gadget>
<name>Citrix Logon Controller</name>
<version>0.1</version>
<author name="Brian G. Shacklett">
<info url="http://digital-traffic.net" />
</author>
<copyright>© Brian G. Shacklett</copyright>
<description>Controls Citrix Logons.</description>
<hosts>
<host name="sidebar">
<base type="HTML" apiVersion="1.0.0" src="gadget.html" />
<permissions>Full</permissions>
<platform minPlatformVersion="1.0" />
</host>
</hosts>
</gadget>
HTML:
<html>
<head>
<title>Citrix Manager</title>
<script type="text/javascript">
debugger;
</script>
<script src="scripts/debug.js" type="text/javascript"></script>
<script src="scripts/gadget.js" type="text/javascript"></script>
<script src="scripts/util.js" type="text/javascript"></script>
<link type="text/css" rel="stylesheet" href="styles/gadget.css" />
</head>
<body >
<div id="header"><h1>Citrix Manager</h1></div>
<div id="mainContent">
<a href="#" onClick="window.location.reload()">reload</a><br />
<a href="#" onClick="testFunction();">New Server</a>
</div>
</body>
</html>
gadget.js:
function testFunction()
{
document.body.innerHTML = "asdf";
}
答案 0 :(得分:1)
您的代码看起来很好,我使用innerHTML
并链接onclick
很多次。我会检查两件事。
在document.body.innerHTML = "asdf";
行的正上方,放置window.prompt("","");
。这将允许您验证函数是否被调用:
function testFunction()
{
window.prompt("", "");
// window.prompt("", document.body.innerHTML); // before
document.body.innerHTML = "asdf";
// window.prompt("", document.body.innerHTML); // after
}
您还可以在提示之前/之后添加一些内容,以获得innerHTML的值(请参阅注释代码)。
其次,我会检查您可能正在使用的任何转换。在Vista System.Gadget.beginTransition()
中,将锁定小工具的外观,直到调用System.Gadget.endTransition()
为止。如果在这两个函数之间引发错误,则永远不会调用endTransition()
,并且小工具将被锁定。
System.Gadget.beginTransition();
blah = blah.blah.blah.blah; // "blah" is null or not an object
System.Gadget.endTransition(System.Gadget.TransitionType.morph, 1.0);
使用try / catch围绕其间的内容始终是最安全的。除此之外,我无法说出可能导致您的DOM问题的原因,但我的第一个建议(prompt
)可能会让您了解问题所在。
之前应该发现这个。您需要使用链接点击:
取消return false;
的默认操作
<a href="#" onClick="testFunction(); return false;">New Server</a>
运行innerHTML函数后,页面将导航到“#”。我不认为这会是一个问题,因为#通常会带你到一个页面锚点而不重新加载,但看起来这就是问题的原因。经过全面测试。