使用javascript加载loadUrl和loadData之间的区别

时间:2012-07-12 08:57:31

标签: javascript android

我尝试在Android webview中加载带有ajax帖子请求的html页面。

当我使用loadUrl加载webview时,javascript工作正常,但是当我尝试使用loadData加载时(我需要它)我收到错误:“NETWORK_ERR: XMLHttpRequest Exception 101”。此错误听起来像是访问控制原因问题。

parseJsoup函数用良好的字符串替换html页面中的某些字符串。我检查传递给loadData的数据,并且脚本部分没有改变。

我的oncreate功能:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        
    String html = parseJsoup("index.html");

    setContentView(R.layout.main);
    myBrowser = (WebView)findViewById(R.id.mybrowser);
    myBrowser.getSettings().setJavaScriptEnabled(true); 
    myBrowser.setWebViewClient(new MyWebViewClient());
    //myBrowser.loadUrl("file:///android_asset/index.html");            
    myBrowser.loadDataWithBaseURL("", html, "text/html", "utf-8", null);
}

我的javascript代码:

$.ajaxSetup({
  contentType: "application/json; charset=utf-8",
  datatype: "json",
  async: false,
});


$.ajax({
    type: "POST",
    url: "my url",
    data: 'my data',        
    success: function(data){
    // Do some action here with the data variable that contains the resulting message
      document.write("OK "+JSON.stringify(data));
      console.log(data);
    },
    error: function(data){
      document.write("KO "+JSON.stringify(data));
      console.log(data);
    }
});

由于

1 个答案:

答案 0 :(得分:0)

假设您的意思是,当您说loadData时为android.webkit.WebView.loadDataWithBaseURL,而当您说loadUrl时为android.webkit.WebView.loadUrl

documentation开始,只有它们之间存在差异,loadURL呈现的webkit具有您设置的网址。另一方面,loadData呈现webkit,源代码来自参数,baseURL也是参数。

您获得的javascript错误消息主要与您尝试跨域ajax请求时有关。这似乎更适合你的情况,因为你的方法之间的唯一区别似乎是其中一个是一个实际的URL,另一个是动态创建的网页,没有可靠的网址。

还来自documentation of loadDataWithBaseURL

  

“...基本URL用于解析相对URL和应用时   JavaScript的原始政策相同。“

你没有设置baseURL参数可能会让我们知道这个问题。

尝试将一些虚拟域名或您拥有的域分配给baseURL,并将此域附加到您的javascript ajax资源端点。如:

myBrowser.loadDataWithBaseURL("http://mydomain/", html, "text/html", "utf-8", null);

和Javascript:

$.ajax({
    type: "POST",
    url: "http://mydomain/my url",
    data: 'my data',        
    success: function(data){
    // Do some action here with the data variable that contains the resulting message
      document.write("OK "+JSON.stringify(data));
      console.log(data);
    },
    error: function(data){
      document.write("KO "+JSON.stringify(data));
      console.log(data);
    }
});