通过传递URL参数在Webview中打开页面

时间:2013-03-31 10:54:40

标签: java android parameters webview

我正在开发一个Android应用程序,可以在应用程序的webview中打开HTML页面。 HTML页面存储在assets文件夹中,我通过

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

现在,该页面接受来自URL(javascript)的参数。我需要知道如何将URL参数传递给存储在assets文件夹中的这个html文件。像这样写:

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

不起作用。 还有其他办法吗?

日亚

3 个答案:

答案 0 :(得分: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");  

答案 1 :(得分:1)

我尝试了shaish和许多其他人建议的方法,将url参数传递给'asset folder'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模拟器上运行。

答案 2 :(得分:1)

类似的解释,如shaish,但适应我自己的情况:

我的问题是,当我切换到另一个应用程序时,在访问webapp时,webview不断重新加载。我想这是因为我的onCreate()方法中的以下行:myWebView.loadUrl(url);我有想法在url中传递这些状态变量,但是你知道它还不可能。 我所做的是使用onSaveInstanceState(Bundle outState) {...}保存某些变量的状态,并使用onRestoreInstanceState(Bundle savedInstanceState){...}恢复它们。

在设置myWebView后的onCreate方法中,我执行了以下操作:

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 
    }
}