2013-03-31 33 views
1

我上,在應用程序內的WebView打開一個HTML頁面的Android應用程序的工作。在HTML頁面保存在文件夾中的資產和I,通過打開一個網頁在網頁視圖通過傳遞URL參數

loadUrl("file:///android_asset/a.html"); 

手段現在叫它,頁面是這樣的,它接受來自URL(JavaScript)的參數。我需要知道如何將URL參數傳遞到存儲在assets文件夾中的這個html文件。這樣寫:

loadUrl("file:///android_asset/a.html?q=2&w=3"); 

不起作用。 還有別的辦法嗎?

日亞

回答

2

如果你的HTML頁面處理通過JavaScript的參數(我想不出它可以處理他們的任何其他方式),你可以調用javascript函數在你的代碼與頁面後的參數被加載,並傳遞參數給它。

webview.getSettings().setJavaScriptEnabled(true);   
    webview.setWebViewClient(new WebViewClient() {   

    @Override   
    public void onPageFinished(WebView view, String url)  {   
     webview.loadUrl("javascript:(function() { setParameters(2,3)})()");   
     } 
    }); 

    webview.loadUrl("file:///android_asset/a.html");   
+0

好吧,讓我來試試吧。我會讓你知道的。順便提一下,謝謝你的回答。 –

+0

嘿,我確實嘗試過,但遇到了另一個問題。我的JavaScript頁面使用它來處理參數: 'var sURL = window.document.URL.toString();' 這不起作用。有沒有其他的方式來處理參數?我確切的需要是將一個字符串傳遞給javascript函數。 –

+0

你不需要從url獲取參數,只需從函數中獲取它們即可。也可能(也許,還沒有測試過),你可以覆蓋windows.document.URL並把你自己的價值。 – shaish

1

我嘗試了shaish和許多其他人提出的將url參數傳遞給「資源文件夾」url的方法。這似乎是Android 3和4(http://code.google.com/p/android/issues/detail?id=17535)的一個衆所周知的錯誤。簡單地調用webview.loadUrl(「file:///android_asset/a.html?q = 2 & w = 3」)可用於黑莓10模擬器。

1

類似的解釋一樣shaish但適合我自己的情況:

我的問題是,我隨時切換到另一個應用程序,來對Web應用程序時,web視圖保持重裝。我想這是因爲在我onCreate()方法下面一行:myWebView.loadUrl(url);我有想法的URL來傳遞這些狀態變量,但你知道這是不可能的呢。 我所做的就是使用onSaveInstanceState(Bundle outState) {...}保存一些變量的狀態,並使用onRestoreInstanceState(Bundle savedInstanceState){...}恢復它們。

在onCreate方法建立myWebView後,我做了以下內容:

myWebView.setWebViewClient(new WebViewClient() { 
@Override 
public void onPageFinished(WebView view, String urlString) 
{ 
    Log.i("onPageFinished", "loadVariables("+newURL+")"); 
    if(newURL!="") 
     myWebView.loadUrl("javascript:loadVariables("+"\""+newURL+"\")"); 
} 

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    view.loadUrl(url); 
    return true; 
} 
}); 

jsInterface = new JSInterface(this,myWebView); 
myWebView.addJavascriptInterface(jsInterface, "Android"); 

if (savedInstanceState != null) 
{ 
// retrieve saved variables and build a new URL 
newURL = "www.yoururl.com"; 
newURL +="?var1=" + savedInstanceState.getInt("key1"); 
newURL +="?var2=" + savedInstanceState.getInt("key2"); 
Log.i("myWebApp","NEW URL = " + newURL); 
} 
myWebView.loadUrl("www.yoururl.com"); 

那麼,什麼情況是,我第一次加載頁面,然後我通過變量時的頁面完成加載。 在javascript中loadVariables功能如下:

function loadVariables(urlString){ 
    // if it is not the default URL 
    if(urlString!="www.yoururl.com") 
    { 
     console.log("loadVariables: " + urlString); 
     // parse the URL using a javascript url parser (here I use purl.js) 
     var source = $.url(urlString).attr('source'); 
     var query = $.url(urlString).attr('query'); 
     console.log("URL SOURCE = "+source + " URL QUERY = "+query); 
     //do something with the variables 
    } 
}