【问题标题】:Difference between loadUrl and loadData with javascriptjavascript loadUrl 和 loadData 的区别
【发布时间】:2012-07-11 23:50:56
【问题描述】:

我尝试在 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);
    }
});

谢谢

【问题讨论】:

    标签: javascript android


    【解决方案1】:

    假设你的意思是,android.webkit.WebView.loadDataWithBaseURL 当你说 loadData,android.webkit.WebView.loadUrl 当你说 loadUrl。

    来自documentation,它们之间的唯一区别是,loadURL 呈现一个具有您设置的 url 的 webkit。另一方面,loadData渲染webkit,那个源码来自一个参数,baseURL也是一个参数。

    您收到的 javascript 错误消息主要与您尝试跨域 ajax 请求时有关。对于您的情况,这似乎更合理,因为您的方法之间的唯一区别似乎是其中一个是实际 URL,另一个是动态创建的网页,没有可靠的 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);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 2012-09-07
      • 2013-01-19
      • 2013-06-18
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多