HTMLファイルのコンテンツをAndroidWebビューにうまく表示できます。HTMLファイルにパラメータを渡すにはどうすればよいですか。たとえば、HTMLコンテンツにビデオプレーヤーがある場合、動的ビデオを再生するには、動的な値(URL)をHTMLファイルに渡す必要があります。 HTMLファイルはアセットフォルダにありますが、どうすればよいですか?
ありがとう。
HTMLファイルのコンテンツをAndroidWebビューにうまく表示できます。HTMLファイルにパラメータを渡すにはどうすればよいですか。たとえば、HTMLコンテンツにビデオプレーヤーがある場合、動的ビデオを再生するには、動的な値(URL)をHTMLファイルに渡す必要があります。 HTMLファイルはアセットフォルダにありますが、どうすればよいですか?
ありがとう。
今日この問題に遭遇しましたが、UTF-8エンコーディングで動作するためにこれが必要だったので、これが私のアプローチでした。誰かを助け、この質問に対する以前の回答のいくつかを明確にすることを願っています。
HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h1>%ERR_TITLE%</h1>
<h2>%ERR_DESC%</h2>
</body>
</html>
Java:
String content = IOUtils.toString(getAssets().open("error.html"))
.replaceAll("%ERR_TITLE%", getString(R.string.error_title))
.replaceAll("%ERR_DESC%", getString(R.string.error_desc))
mWebView.loadDataWithBaseURL("file:///android_asset/error.html", content, "text/html", "UTF-8", null);
IOUtilsについて:http: //commons.apache.org/proper/commons-io/download_io.cgi
ビデオのURLを直接渡す代わりに(例に従って)、Htmlファイルでトークンを使用します。例えば:
<embed src="$VIDEO_URL$" autostart="false" />
ここで、$VIDEO_URL$
は実行時に実際のビデオに置き換えられるトークンになりますURL
。
また、実行時にアセットフォルダーの内容を変更することはできないため、htmlファイルの内容をString変数にロードし、replace
メソッドを使用してトークンを実際の文字列に置き換えURL
、最後にその文字列をWebビューに渡す必要があります。このようなもの:
//The html variable has the html contents of the file stored in the assets folder
//and real_video_url string variable has the correct video url
html = html.replace("$VIDEO_URL$", real_video_url);
webview.loadData(html, "text/html", "utf-8");
HTMLに動的なものを入れたい場合は、次のように動的な部分が記述されたhtmlを作成します。
<B>%NAME%</B>
次に、HTMLをロードします。
String template = Utils.inputStreamToString(assets.open("html/template.html"));
次に、すべてのダイナミクスパーツを次のように置き換えます。
String data = template.replaceAll("%NAME%", "Alice McGee");
それから私はそれを私のwebViewに渡します!
WebView webView = new WebView(this);
webView.loadDataWithBaseURL("file:///android_asset/html/", data, "text/html", "utf-8", null);
私はなんとか別の方法で変数を渡すことができました。
私の問題は、別のアプリに切り替えるたびに、Webアプリにアクセスすると、Webビューがリロードされ続けることでした。これは、私の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");
したがって、最初にデフォルトのURL(www.yoururl.com)を使用してページをロードし、onPageFinishedで新しいjavascriptメソッドを呼び出して変数を渡します。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
}
}
ここで資産は何を意味しますか?
文字列テンプレート=Utils.inputStreamToString(assets.open( "html / template.html"));