loadUrl和loadData与javascript的区别

4
我尝试在Android的webview中使用ajax post请求来加载一个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
假设您所说的loadData是指android.webkit.WebView.loadDataWithBaseURL,而loadUrl是指android.webkit.WebView.loadUrl。
从文档documentation中可以看出,它们之间唯一的区别在于loadURL呈现了一个您设置的具有url的webkit。另一方面,loadData呈现了一个源代码来自参数的webkit,并且baseURL也是一个参数。
您收到的javascript错误消息,大多与尝试跨域ajax请求有关。这似乎更符合您的情况,因为您的方法之间唯一的区别似乎是其中一个是实际的URL,而另一个是动态创建的网页,没有固定的URL。
还从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);
    }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接