webview 中的本地页面未显示
local page in webview not showing
使用 webView.loadUrl 适用于 https 站点,但不适用于位于 /Applications/MAMP/htdocs/test.html[= 的本地页面14=]
webView.loadUrl("/Applications/MAMP/htdocs/test.html") is not working
webView.loadUrl("http://localhost:8080/test.html"); is not working
下面是 test.html 文件
<!DOCTYPE html>
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<h2>JS alert Example</h2>
<button onclick="myFunction()" >Try it</button>
<script>
function myFunction (){
Android.showToast("Sample Android toast message");
}
</script>
</body>
</html>
现在我想使用 webView 加载此页面。
下面是mainactivity.java代码
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
webView = (WebView) findViewById(R.id.webview);
webView.loadUrl("http://127.0.0.1:8080/test.html");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.addJavascriptInterface(new WebAppInterface (this), "Android");
}
}
下面是我的 WebInterface java class :
public class WebAppInterface {
private Context context;
public WebAppInterface (Context context){
this.context = context;
}
@JavascriptInterface
public void showToast (String message){
Toast.makeText(context,message,Toast.LENGTH_LONG).show();
}
}
现在,我无法理解为什么它没有加载 webView.loadUrl 中提到的网页。注意:我已在清单文件中授予互联网权限。
所以如果文件在设备本地(android phone),你需要有文件的路径。如果文件捆绑在资产中,您可以像这样打开文件:
webView.loadUrl("file:///android_asset/filename.html");
或者找不到的话,可以把文件放到raw resources里,把文件读成字符串再用:
webView.loadData(htmlString, "text/html", "utf-8");
无论如何,您遇到的问题很可能是找不到文件。因此,请确保将文件放置在资产或资源中的正确位置。并且您正在正确访问该文件。
这里是关于如何访问资源的文档:
https://developer.android.com/guide/topics/resources/providing-resources
如果您所说的本地是在您的计算机上,并且您正在托管文件(我假设这只是为了测试),那么您需要将 android 设备/模拟器连接到相同的本地网络作为您的计算机,然后通过您计算机的本地ip访问。
这里还有一个类似的问题,已经有人回答了:
Load HTML file into WebView
使用 webView.loadUrl 适用于 https 站点,但不适用于位于 /Applications/MAMP/htdocs/test.html[= 的本地页面14=]
webView.loadUrl("/Applications/MAMP/htdocs/test.html") is not working
webView.loadUrl("http://localhost:8080/test.html"); is not working
下面是 test.html 文件
<!DOCTYPE html>
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<h2>JS alert Example</h2>
<button onclick="myFunction()" >Try it</button>
<script>
function myFunction (){
Android.showToast("Sample Android toast message");
}
</script>
</body>
</html>
现在我想使用 webView 加载此页面。
下面是mainactivity.java代码
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
webView = (WebView) findViewById(R.id.webview);
webView.loadUrl("http://127.0.0.1:8080/test.html");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.addJavascriptInterface(new WebAppInterface (this), "Android");
}
}
下面是我的 WebInterface java class :
public class WebAppInterface {
private Context context;
public WebAppInterface (Context context){
this.context = context;
}
@JavascriptInterface
public void showToast (String message){
Toast.makeText(context,message,Toast.LENGTH_LONG).show();
}
}
现在,我无法理解为什么它没有加载 webView.loadUrl 中提到的网页。注意:我已在清单文件中授予互联网权限。
所以如果文件在设备本地(android phone),你需要有文件的路径。如果文件捆绑在资产中,您可以像这样打开文件:
webView.loadUrl("file:///android_asset/filename.html");
或者找不到的话,可以把文件放到raw resources里,把文件读成字符串再用:
webView.loadData(htmlString, "text/html", "utf-8");
无论如何,您遇到的问题很可能是找不到文件。因此,请确保将文件放置在资产或资源中的正确位置。并且您正在正确访问该文件。
这里是关于如何访问资源的文档: https://developer.android.com/guide/topics/resources/providing-resources
如果您所说的本地是在您的计算机上,并且您正在托管文件(我假设这只是为了测试),那么您需要将 android 设备/模拟器连接到相同的本地网络作为您的计算机,然后通过您计算机的本地ip访问。
这里还有一个类似的问题,已经有人回答了: Load HTML file into WebView