DWRでリバースAjax テストページを使うときの注意点

前回に引き続き、DWRでリバースAjaxをする際、同じパソコンで二つブラウザを開いてるときに出るエラーです。

DWRではhttp://[コンテキストルート]/dwrにアクセスすることで、サーバ上のJavaオブジェクトを操作できるテストページにアクセスできます。テストページからリバースAjaxを行うJavaのメソッドを実行するとブラウザ側(Firefox)で次のようなエラーが出ていました。プログラム自体に問題はなさそうです。

こんな風にリバースAjaxを使ってブラウザ側のhello関数を呼び出します

public void comet(){
	WebContext wctx = WebContextFactory.get();
	Collection<ScriptSession> sessions = wctx.getAllScriptSessions();
	Util utilAll = new Util(sessions);
	ScriptBuffer bf = new ScriptBuffer();
	//ブラウザ側のhello関数を呼び出す
	bf.appendCall("hello");

	utilAll.addScript(bf);
}

ブラウザ側では呼び出されるhello関数をindex.htmlに定義しておきます

function hello(){
	alert('hello world!');
}
  1. firefoxでテストページを開きます
  2. firefoxでhello関数を定義しているindex.htmlを開きます
  3. テストページからcomet()メソッドを実行
  4. index.htmlでhelloメソッドが実行され「hello world!」と書いたアラートが表示される
  5. 「hello is not defined」と表示される


まとめ

おかしな話で、helloがすでに実行されたのにもかかわらずhelloが定義されてないっていうエラーです。テストページとindex.htmlを別のパソコンで動かせばこのエラーメッセージは避けられます。