# HG changeset patch # User Jaroslav Tulach # Date 1365587026 -7200 # Node ID 62d77cc38117ce8697794af8b75bb43a43b834a1 # Parent 787578f33c2142363aa921ac0efde3338b39a784 Clean up script elements after JSONP callback diff -r 787578f33c21 -r 62d77cc38117 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Wed Apr 10 10:08:18 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java Wed Apr 10 11:43:46 2013 +0200 @@ -89,10 +89,12 @@ @JavaScriptBody(args = { "name", "arr", "run" }, body = "if (window[name]) return false;\n " + "window[name] = function(data) {\n " + + " delete window[name];\n" + + " var el = window.document.getElementById(name);\n" + + " el.parentNode.removeChild(el);\n" + " arr[0] = data;\n" + " run.run__V();\n" - + " delete window[name];\n" - + "};" + + "};\n" + "return true;\n" ) private static boolean defineIfUnused(String name, Object[] arr, Runnable run) { diff -r 787578f33c21 -r 62d77cc38117 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Wed Apr 10 10:08:18 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Wed Apr 10 11:43:46 2013 +0200 @@ -17,7 +17,9 @@ */ package org.apidesign.bck2brwsr.htmlpage; +import java.util.Arrays; import java.util.Iterator; +import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.bck2brwsr.htmlpage.api.OnReceive; import org.apidesign.bck2brwsr.htmlpage.api.Page; import org.apidesign.bck2brwsr.htmlpage.api.Property; @@ -42,6 +44,7 @@ }) public class JSONTest { private JSONik js; + private Integer orig; @Test public void personToString() throws JSONException { Person p = new Person(); @@ -183,7 +186,11 @@ parameters = { "callme" } )) @BrwsrTest public void loadAndParseJSONP() throws InterruptedException { + if (js == null) { + orig = scriptElements(); + assert orig > 0 : "There should be some scripts on the page"; + js = new JSONik(); js.applyBindings(); @@ -197,7 +204,14 @@ assert "Mitar".equals(p.getFirstName()) : "Unexpected: " + p.getFirstName(); assert Sex.MALE.equals(p.getSex()) : "Expecting MALE: " + p.getSex(); + + int now = scriptElements(); + + assert orig == now : "The set of elements is unchanged. Delta: " + (now - orig); } + + @JavaScriptBody(args = { }, body = "return window.document.getElementsByTagName('script').length;") + private static native int scriptElements(); @Http(@Http.Resource( content = "{'firstName': 'Sitar', 'sex': 'MALE'}",