最新のWebkitベースのブラウザ(http://montecarlo-tester.appspot.com/)でうまく動作するWebアプリケーションがあります。基本的にWebワーカーを使用してサーバーからデータを取得し、計算を実行した後にそのデータを送信します。WebワーカーがFirefoxとWebkitで動作が異なる
Chrome/Safariではうまくいきますが(コンソールでエラーはありません)、Firefoxで使用しようとするとうまく動作しません。私は、Firefoxで変数 'iterations'が正しく設定されていないことをどうにか推測しました。残念なことに、Firefoxにはデバッガがなく(Webワーカー向け)、javascriptには機能スコープがあるため、問題がどこにあるのかを正確に特定するのは難しいです。私は私のウェブワーカーのためのJavaScriptコードを掲載しました、と誰もが指摘することができれば、私は間違っていたところ、私は思っていた:
importScripts('/static/js/mylibs/jquery.hive.pollen-mod.js');
$(function (data) {
main();
//while(main());
close();
});
function main() {
//make an ajax call to get a param
var iterations//value will be set by server response
var key//key of the datastore object
var continueloop = true;
p.ajax.post({
url:'/getdataurl',
dataType: "json",
success: function(responseText){
if (responseText === null) {
var workermessage = {
"log":"responseText is null. Either the server has issues or we have run out of stuff to compute."
};
$.send(workermessage);
continueloop = false;
}
iterations = responseText.iterationsjob;
key = responseText.key;
}
});
if (continueloop === false) {
return false;
}
//here is where I think the problems begin. In chrome/safari, iterations = 1000.
//In Firefox however, iterations = null. As a result, everything after that does not work.
var i,x,y,z;
var count = 0;
var pi;
start = new Date();
for (i=0;i<iterations;i++) {
x = Math.random();
y = Math.random();
z = x*x+y*y;
if(z<=1.0){
count++;
}
}//end for loop
pi = count/(iterations)*4.0;
end = new Date();
result = {
"estimated_pi":pi,
"num_iter":iterations,
"duration_ms":end.valueOf()-start.valueOf(),
"key":key
};
//send results to the server
p.ajax.post({
url: "/resultshandler",
dataType:'json',
data: result,
success: function()
{
//do nothing!
}
});
$.send(result);
return true;//persists the loop
}
あなたは[Firebugの](http://getfirebug.com)しようとしたことがあり、 "残念ながら、Firefoxはデバッガを欠い":
ああ、およびスクリプトは、その行の前に、この素晴らしいコメントを持っていますか? –
'var iterations'と' var key'のコメントの前に変数名の後ろにセミコロンを置くのは違いますか? – jfriend00
'p.ajax.post'関数は、非同期または同期ajaxを実行していますか? asyncの場合、 'iterations'は成功ハンドラでのみ設定されます.Ajaxコールがまだ完了していないため、' iterations'がまだ設定されていないため、設定する必要はありません。非同期のajax呼び出しを呼び出すだけで操作が開始され、javascriptは実行を継続します。成功ハンドラが実行されると、いつか終了します。 – jfriend00