我有一个 html 字符串,可以在浏览器中正常加载,但是当尝试在 andriod Web 视图中加载时,它显示空白屏幕,没有任何错误。我不想通过文件 url 加载,因为我希望该字符串中的参数是动态的。
public class MainActivity extends Activity {
private ProgressDialog prg;
private WebView webView;
private int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
String htmlString = "<!DOCTYPE html>\n" +
"<html>\n" +
"\n" +
"<head>\n" +
" <meta charset=\"utf-8\">\n" +
" <title></title>\n" +
" <meta name=\"author\" content=\"\">\n" +
" <meta name=\"description\" content=\"\">\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n" +
"\n" +
" \n" +
"</head>\n" +
"\n" +
"<body>\n" +
"\n Hello" +
"<my-component source-url=\"https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8\"/>\n" +
"\n" +
"<script src='https://unpkg.com/[email protected]/dist/test/test.js'></script>\n" +
"</body>\n" +
"\n" +
"</html>";
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView =(WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getPath());
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
webView.setWebViewClient(new WebViewClient());
webView.loadData(htmlString, "text/html; charset=utf-8", "UTF-8");;
}
public void getWebview(String myurl)
{
webView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
prg.show();
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
prg.dismiss();
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
});
prg = ProgressDialog.show(MainActivity.this, "Blog App", "İçerik Yükleniyor", true);
webView.loadUrl(myurl);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
这里有什么问题有人可以指点我吗?
编辑
尝试以下 -> 未提供基本 url 的问题。
public class MainActivity2 extends Activity {
private ProgressDialog prg;
private WebView webView;
private int counter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
String htmlString = "<!DOCTYPE html>\n" +
"<html>\n" +
"\n" +
"<head>\n" +
" <meta charset=\"utf-8\">\n" +
" <title></title>\n" +
" <meta name=\"author\" content=\"\">\n" +
" <meta name=\"description\" content=\"\">\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n" +
"\n" +
" \n" +
"</head>\n" +
"\n" +
"<body>\n" +
"\n Hello" +
"<my-component source-url=\"https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8\"/>\n" +
"\n" +
"<script src='https://unpkg.com/[email protected]/dist/test/test.js'></script>\n" +
"</body>\n" +
"\n" +
"</html>";
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_web);
webView = (WebView) findViewById(R.id.webView);
WebSettings settings = webView.getSettings();
settings.setBuiltInZoomControls(true);
settings.setDomStorageEnabled(true);
settings.setJavaScriptEnabled(true);
settings.setAppCacheEnabled(true);
settings.setAppCachePath(getApplicationContext().getCacheDir().getPath());
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
webView.setWebViewClient(new WebViewClient());
webView.loadDataWithBaseURL("https://fcc3ddae59ed.us-west-2.playback.live-video.net", htmlString, "text/html", "UTF-8", null);
}
public void getWebview(String myurl) {
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
prg.show();
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
prg.dismiss();
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
});
prg = ProgressDialog.show(MainActivity2.this, "Blog App", "İçerik Yükleniyor", true);
webView.loadUrl(myurl);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
如果您知道 html,您可以创建一个 html 文件。在您的 app>src>main 目录中创建一个名为“assets”的目录。在此目录中放置格式正确的 html 文件,称为 webViewfile.html 等
然后从您的网络视图中您可以像这样加载它
webPlayerWebView.loadUrl("file:///android_asset/webViewfile.html")
您的 html 文件上下文是
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title></title>
<meta name="author" content=""/>
<meta name="description" content=""/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body style="margin: 0;">
<my-component source-url="https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8"></my-component>
<script src="https://unpkg.com/[email protected]/dist/test/test.js"></script>
</body>
</html>
我已经测试过了,它有效
用这个:
webView.loadDataWithBaseURL(null, htmlString , "text/html", "utf-8", null);
现在应该可以工作了
user8608556 答案正确 如果您不希望视频网址作为动态的基本网址,请尝试提供您的脚本网址作为基本网址
webView.loadDataWithBaseURL("https://unpkg.com/[email protected]/dist/test/test.js", htmlString , "text/html", "utf-8", null);