繁体   English   中英

Android将外部本地javascript文件加载到WebView中

[英]Android load external local javascript file into WebView

在Android 2.2 WebView中,我加载了一个本地html文件,该文件包含一个JavaScript文件的链接(与html文件位于同一个文件夹中)。 本地html文件成功加载但引用的JavaScript本地文件没有,我在LogCat日志中收到此错误:

03-25 16:48:57.965:错误/ Web控制台(10865):SyntaxError:文件中的解析错误:///data/data/com.mydomain.myapp/test.js:91

错误的行号是文件的最后一行,错误日志中的路径是js文件的正确路径。 当然,一切都在Chrome中按预期工作。 这是html文件的片段

<html>
<head>
    <title>My Title</title>
    <meta name = "viewport" content = "width = device-width">
    <meta name = "viewport" content = "initial-scale = 1.0">
    <script type="text/javascript" src="test.js"></script>
    <script type="text/javascript">
        button_onclick = function() {};
    </script>

我发现这个错误是由于js文件的打包方式造成的。 应用程序在初始化时从SQLite资产数据库中读取文件,并将读取的文件写入设备本地文件系统。 使用Firefox SQLite Manager将js文件作为文本保存在SQLite数据库中。 当我将SQL文件管理器中的js文件保存为BLOB而不是文本时,一切都按预期工作,并且WebView能够从设备本地文件系统成功加载js文件。 对于html文件来说这似乎并不重要,但是对于js文件,解析器在文件的末尾寻找一些东西,如果找不到它,那么它会忽略js文件

我怀疑这可能是由于缺少文件结尾字符,由于某些原因,当我使用java输出流写入文件时,当资产输入流不包含文件结尾字符时,这些字符没有添加。

我会查看android文档中的WebView参考。 来自Doc:

默认情况下,WebView不提供类似浏览器的小部件,不启用JavaScript并忽略网页错误。 如果您的目标只是将一些HTML显示为UI的一部分,那么这可能很好; 除了阅读之外,用户不需要与网页交互,并且网页不需要与用户交互。 如果您真的想要一个完整的Web浏览器,那么您可能希望使用URL Intent调用Browser应用程序而不是使用WebView显示它

但是,您可以通过setJavaScriptEnabled()setJavaScriptEnabled()上启用它。

按照答案确定webview中的url元素shouldOverRideUrlLoading及其中的链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM