我正在开发一个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");
不起作用。 还有其他办法吗?
日亚
答案 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
}
}