Fix a problem on Safari/Chrome where docuemntElement.getFirstChild is not
necessarily the head element.

Patch by: dwolf
Review by: jat


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6025 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/jsonp/client/JsonpRequest.java b/user/src/com/google/gwt/jsonp/client/JsonpRequest.java
index 62b2b38..43699ec 100644
--- a/user/src/com/google/gwt/jsonp/client/JsonpRequest.java
+++ b/user/src/com/google/gwt/jsonp/client/JsonpRequest.java
@@ -52,9 +52,9 @@
     return $wnd[name] = new Object();
   }-*/;
   
-  private static native Node getDocumentElement() /*-{
-    return $doc.documentElement;
-  }-*/;
+  private static Node getHeadElement() {
+    return Document.get().getElementsByTagName("head").getItem(0);
+  }
   
   private static String nextCallbackId() {
     return "I" + (callbackCounter++);
@@ -142,7 +142,7 @@
     script.setType("text/javascript");
     script.setId(callbackId);
     script.setSrc(uri.toString());
-    getDocumentElement().getFirstChild().appendChild(script);
+    getHeadElement().appendChild(script);
     timer = new Timer() {
       @Override
       public void run() {
@@ -225,7 +225,7 @@
       public void execute() {
         unregisterCallbacks(CALLBACKS);
         Node script = Document.get().getElementById(callbackId);
-        getDocumentElement().getFirstChild().removeChild(script);
+        getHeadElement().removeChild(script);
       }
     });
   }