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!'); }
- firefoxでテストページを開きます
- firefoxでhello関数を定義しているindex.htmlを開きます
- テストページからcomet()メソッドを実行
- index.htmlでhelloメソッドが実行され「hello world!」と書いたアラートが表示される
- 「hello is not defined」と表示される
まとめ
おかしな話で、helloがすでに実行されたのにもかかわらずhelloが定義されてないっていうエラーです。テストページとindex.htmlを別のパソコンで動かせばこのエラーメッセージは避けられます。