2012-07-12 82 views
4

我嘗試在Android的WebView一個HTML頁面的ajax post請求加載。差異與JavaScript

當我用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); 
    } 
}); 

感謝

回答

0

假設你的意思是,android.webkit.WebView.loadDataWithBaseURL當你說loadData,並android.webkit.WebView.loadUrl當你說使用loadURL。

documentation,只是它們之間的區別是,使用loadURL呈現具有設置URL的WebKit的。另一方面,loadData渲染webkit,源代碼來自參數,baseURL也是一個參數。

你的JavaScript錯誤信息,主要是相關的,當你嘗試跨域Ajax請求。這似乎對你的情況更plausable因爲你的方法之間的唯一差別似乎是他們中的一個是實際的URL另一種是動態創建的網頁,沒有堅實的URL。

而且還從documentation of loadDataWithBaseURL

「...的基本URL既用來解決相對URL和應用 JavaScript的同源策略的時候。」

而你沒有設置baseURL參數可能會讓我們知道這個問題。

嘗試分配一些虛擬的域名,或者你基本URL自己的域名,並且還追加此域名您的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); 
    } 
});