我是Android Dev的新手,我正在开发我认为简单的应用程序。我有一些存储的HTML代码是原始资源文件夹 - 代码包含一些Javascript。当我在谷歌浏览器中运行代码时它运行正常 - 但是当我使用loadData函数将其加载到webview时,它不会运行Javascript。
我已启用javascript:
mWebView.getSettings().setJavaScriptEnabled(true);
我需要能够在浏览器中运行此Javascript - 任何帮助吗?
答案 0 :(得分:8)
试试这个:
webView.loadDataWithBaseURL(“blarg:// ignored”,getData(),“text / html”, “utf-8”,“”);
答案 1 :(得分:2)
尝试从代码中调用JS函数。像这样:
mWebView.loadUrl("javascript:myFunction()");
答案 2 :(得分:1)
加载的HTML数据是什么样的?在我的例子中,我生成的原始HTML数据格式为:
<html>
<head>
<style>..</style>
<script>..</script>
</head>
<body>...</body>
</html>
在普通浏览器中测试,事情按预期工作。但是,一旦我使用了WebView.loadData,CSS似乎被识别,但我发现Javascript无法正常工作。
发现对我有用的是将Javascript移动到外部文件(更具体地说,我将我需要的脚本放到资源/使用内容提供商。
<html>
<head>
<link rel="stylesheet" type="text/css" href="content://PATHTOSTYLESHEET" />
<script src="content://PATHTOJS"></script>
</head>
<body>...</body>
</html>
根据What is the difference between Android webview's loadData and loadDataWithBaseURL,如果您设置了存储样式/脚本的正确基本URL,则使用适当的文件://对于您在本地存储的任何内容,这听起来更为简单。
答案 3 :(得分:1)
我正在跟进@ Cobaia上面的回答,另一个(我认为)有用的功能:
由于我需要在测试和调试时不断更改嵌入式HTML,因此我决定在开发页面期间从本地Web服务器获取原始页面,并将其传递给webView,如下所示:
String url, str;
str = getFromURL(url);
webView.loadDataWithBaseURL("blarg://ignored", str, "text/html", "UTF-8", "");
其中getFromURL()定义为:
public String getFromURL(String urlToRead) {
URL url;
HttpURLConnection conn;
BufferedReader rd;
String result = "";
char[] chunk = new char[8192];
int blen = chunk.length;
int amt;
try {
url = new URL(urlToRead);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((amt = rd.read(chunk, 0, blen)) > 0) {
result += new String(chunk, 0, amt);
}
rd.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
请注意,我必须创建一个特殊的控制器(我正在使用CodeIgniter)以允许从服务器下载文件作为文本文件。
希望这个暗示也能帮助别人!
答案 4 :(得分:0)
上述解决方案对我不起作用,因为我正在加载一个包含HTML而不是单独的HTML文件的字符串。字符串中的HTML引用了资产/ www /中的JavaScripts。有用的是使用mWv.loadDataWithBaseURL(“file:/// android_asset / www /”,HTML_AS_STRING,“text / html”,“UTF-8”,null);
请参阅下面的完整示例。该示例创建webview,从字符串加载HTML,然后在单独的JavaScript文件中调用函数。该功能只显示警报。
public class MainActivity extends Activity{
private WebView mWv;
private static final String HTML_AS_STRING =
"<!DOCTYPE html>" +
"<html>" +
"<head>" +
"</head>" +
"<body>" +
"<p>Just some text in a paragraph.</p>" +
"<div align=\"center\" style=\"color:#0000FF\">" +
"<h3>This is a heading in a div element</h3>" +
"<p>This is some text in a div element.</p>" +
"</div>" +
"<font size=\"4\" color=\"0000FF\">" +
"This is some sized and colored text." +
"</font>"
+
"<script src=\"index.js\"></script>" +
"</body>" +
"</html>";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
mWv = (WebView)findViewById(R.id.webview);
mWv.getSettings().setJavaScriptEnabled(true);
mWv.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url){
mWv.loadUrl("javascript:showAlert()");
}
});
mWv.setWebChromeClient(new WebChromeClient());
mWv.loadDataWithBaseURL("file:///android_asset/www/", HTML_AS_STRING, "text/html", "UTF-8", null);
}
}
index.js(assets / www /中的单独文件):
function showAlert() {
alert("A simple alert!");
}