2

我正在开发一个在应用程序内的 web 视图中打开 HTML 页面的 Android 应用程序。HTML 页面存储在 assets 文件夹中,我通过以下方式调用它

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

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

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

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

里亚

4

3 回答 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");  
于 2013-03-31T11:04:07.640 回答
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 模拟器上运行。

于 2013-04-01T08:07:24.403 回答
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");

因此,发生的情况是,首先我加载页面,然后在页面完成加载时传递变量。在 javascriptloadVariables函数中看起来像这样:

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 
    }
}
于 2013-11-15T10:54:48.380 回答