微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Webview Javascript – 对脚本的引用不起作用

Android Studio 1.0.1,API 21上开发.以下是文件夹结构 –

它本质上是一个基于AngularJS的应用程序,我想包装在webview容器中并在Android上运行.

我的Android代码是 –

WebView myWebView = (WebView) findViewById(R.id.webview);
 WebSettings webSettings = myWebView.getSettings();
 webSettings.setJavaScriptEnabled(true);
 webSettings.setDomStorageEnabled(true);
 myWebView.setWebChromeClient(new WebChromeClient());

 String filePath = "file:///android_asset/www/index.html";
 myWebView.loadUrl(filePath);

html中的引用都是相对的 –

<script src="lib/jquery.min.js"></script>
<script src="lib/angular.min.js"></script>
<script src="lib/angular-route.min.js"></script>
<script src="lib/bootstrap.min.js"></script>

但有趣的是,我搜索了大多数地方,而且我不确定我哪里出错了.我的推荐根本不起作用!所以我无法访问我的lib文件,我的脚本,我的CSS.
此外,如果我在webview中运行外部角度网页,使用相同的Java代码,它运行完美!

任何帮助表示赞赏.

注意:请不要建议使用Cordova / PhoneGap.这是一个原生的项目要求(我坦率地不明白为什么,但我只是一个没有发言权的开发人员).

旁注:我在iOS webview上遇到了同样的问题.参考不起作用!

UPDATE

试过以下事情:

尝试loadDataWithBaseURL(),不起作用.

尝试了路径的所有可能方案.没有任何效果.

文件夹中删除了所有脚本并将它们放在根级别,修改后的链接没有路径,只是文件名.仍然无法正常工作.这太奇怪了.

解决方法

我设法通过以下方式做了类似的事情:
WebView webView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.setWebChromeClient(new WebChromeClient());

try {
    String html = readAssetFile("www/index.html");
    webView.loadDataWithBaseURL("file:///android_asset/www/",html,"text/html","UTF-8",null);
} catch (IOException e) {
}

‘readAssetFile’在哪里:

private String readAssetFile(String fileName) throws IOException {
    StringBuilder buffer = new StringBuilder();
    InputStream fileInputStream = getAssets().open(fileName);
    BufferedReader bufferReader = new BufferedReader(new InputStreamReader(fileInputStream,"UTF-8"));
    String str;

    while ((str=bufferReader.readLine()) != null) {
        buffer.append(str);
    }
    fileInputStream.close();

    return buffer.toString();
}

此外,我的页面很简单 – 只是为了测试图像,angularjs lib和css样式表:

<!DOCTYPE html>
<html>

<head>
<link rel="stylesheet" type="text/css" href="css/mystyle.css">
<script src="libs/angular.min.js"></script>
</head>

<body>

<img src="images/IMG_7765.JPG" alt="De nada" width="200" height="300">

<div ng-app="">

<p>Input something in the input Box:</p>
<p>Name: <input type="text" ng-model="name" value="John"></p>
<p ng-bind="name"></p>

</div>

</body>
</html>

另外,我的文件结构如下

希望能帮助到你 :)

原文地址:https://www.jb51.cc/android/317385.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐