3

Windows デスクトップ ガジェットの作成に取り組んでいます。document.createElement を使用して、必要な HTML 要素を作成できます。それらの属性を設定でき、設定後にそれらの属性を取得できますが、ドキュメントを変更するために何をしても、完全にサイレントに失敗します。エラーはまったく表示されませんが、ガジェットは変更されません。document.body.innerHTML = "asdf";まったく何もしないような単純なものでさえ。IE8 の同じコードは完全に正常に動作します。ここで何が欠けていますか?

ガジェット.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>&#169; 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>

ガジェット.js:

function testFunction()
{
document.body.innerHTML = "asdf";
}
4

1 に答える 1

1

あなたのコードは問題ないように見えます。私はinnerHTMLand linkをonclick何度も使用しました。私は2つのことを確認します。

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()これら 2 つの関数の間でエラーがスローされた場合、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 関数が実行されると、ページは "#" に移動します。# 通常、リロードせずにページ アンカーに移動するため、これが問題になるとは思いませんでしたが、これが問題の原因のようです。完全にテスト済み。

于 2010-02-20T10:54:33.570 に答える