2011-07-28 3 views
0

ユーザーが指定した時間帯に合わせていくつかのアナログ時計を表示するように作成したWebパーツがあります。私が抱えている問題は、私の時計が時々ロードされ、時にはそうでないことです。私は自分の問題が私のjsファイルの読み込み順序にある​​と信じています。私は、私のWebパーツコードでOnLoadイベントで読み込んだjsを持っていて、clock.jsファイル(クロックを構築するファイル)は、UTC時間+オフセットが与えられているコードより前に実行されています。 HtmlTextWritterを使用してC#で最後にロードするJavaScriptファイルを遅延させる方法

protected override void Render(HtmlTextWriter output) 
    { 
    base.Render(output); 


var skins = this._ClockSkins.ToString(); 

output.Write("<table align=\"center\"><tr>"); 

for (int i = 0; i < 6; i++) 
{ 



output.RenderBeginTag(HtmlTextWriterTag.Script); 
output.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript"); 

//output.Write("var time;"); 
output.Write("function LoadTrigger() {"); 
output.Write("document.write('<span><div width=\"90px\"><td width=\"90px\" valign=\"top\" align=\"center\" ><canvas class=\"CoolClock:" + skins + "\" id=\"[" + i + "]\" ></canvas></td></div></span>');"); 
output.Write("}"); 
output.Write("window.onload = LoadTrigger();"); 
//output.Write("window.setTimeout(\"LoadTrigger()\", 1000);"); 
output.RenderEndTag(); 

//output.Write("<script defer=\"defer\" type=\"text/javascript\">document.write  ('<span><div width=\"90px\"><td width=\"90px\" valign=\"top\" align=\"center\" ><canvas class=\"CoolClock:" + skins + "\" id=\"[" + i + "]\" ></canvas></td></div></span>');</script>"); 
} 

output.Write("</tr></table>"); 


} 
} 

は今、時にはクロックが細かいレンダリングされます、そして時々私は私のアナログ時計の殻なし分または秒の手を持つことになります(これらは、次のとおりです。ここ

はクロックのクロックを表示するための私のコードですそれが設定されている時間帯に基づいてレンダリングされます)。あなたがコメントアウトしたコードからわかるように、私はこれを正しく動作させるためのいくつかの異なる方法を試しました。私の時計が時々動作する理由を尋ね、もし私がページを数回リフレッシュすれば、彼らはうまくいくでしょう。

答えて

1

あなたのページにこのインクルージョンの書き込みを遅らせるために

setTimeout(function(){ 
    document.write("<script type='text/javascript' src='clock.js'></script> 
"); 
}, 1000); 

ようなものを使用することができます。

+0

私はそれを試みました、そして、私が直面する問題は、これがwspであるということです。 JavaScriptファイルは、プロジェクトのルートレベルにないので、scr = "myjs.js"メソッドから呼び出すことはできず、12個のハイブにはないので、 "_layouts/myjs.jsどちらもありません"。それらはアセンブリに組み込まれていますが、SharePointは時には悪いものですから、これはどうやってやるのですか。私はタイムアウトを全部試してみましたが、それはうまくいかないと思っています。 – lazoDev

+0

あなたはあまりにもシンプルで、まだ試していないと思っていました。あなたが乱雑になりたいのであれば、.jsファイルの内容をページに書き出すことができます。 – Maxx

+0

私はしかし、それは大きなファイルです:)私が使っているwebservice呼び出しはJavaScriptであり、私の問題はどこにあるのだろうと思います.C#webservice呼び出しを使っていましたが、これを複数の環境に展開することは、ウェブサーバーのURLをハードコーディングすることを意味しますweb.configの副。 JSでは(window.href)これを行う必要はありませんが、毎回レンダリングすることはできません。奇妙なことは、それがうまくいくということですが、望むときだけです。 – lazoDev

1

jsファイルを呼び出す場合は、実際にJQueryを使用できますか? .jsファイルにJQueryを追加できたら、これを使用することができます:

$(document).ready(function(){ ...あなたのものはここ... });

ページがロードされた後に実行される。

+0

私はできますが、コードを見ると、私のJavaScriptはC#HtmlTextWriterメソッドの内部にあります。これはまだ$(document).ready(関数{....})を打つことはないでしょう。私が必要とするすべてが動くまで。私を信じて、私はすべての明白なものを通りました。私が言ったように、私はC#Webサービス呼び出しを使用し、手動でweb.configファイルのURLを変更しなければならないと考えています。繰り返しますが、コードが全く機能していないわけではなく、ページがロードされたり、リフレッシュされるたびに読み込まれるだけではありません。しかし、それはSharePointがそれをやっているように感じるときにロードされます:) – lazoDev

+1

。私が提案しようとしていた行を削除することです:output.Write( "window.onload = LoadTrigger();");代わりに、次のようなものを追加してください:output.Write( "$(document).ready(function(){LoadTrigger();});");これにより、HtmlTextWriterメソッドで関数を作成することができますが、ページが完全にロードされたことを検証するJQuery経由でトリガーさせることができます。 – PapaDaniel

+0

JQueryライブラリがロードされていることを確認する必要があります。マスターページ、webpartを持つ同じページのコンテンツエディタ、HtmlTextWriterの同様の行を追加することができます:output.Write "