我有一个带有 webview 的 Android 项目。该 webview 加载存储在我的 Assets 文件夹中的静态 html 文件。我的 Assets 文件夹中还有一个第 3 方 javascript 库(rangy)。我的 html 文件头的脚本标签中有一些 javascript。该 JavaScript 引用了 rangey 库中的方法和对象。我的 html 文件通过脚本标记引用了 range。当我尝试使用这些函数和方法时,我收到一条错误消息:
Cannot call method '[any method from rangy library]' of
undefined
以下是相关代码 fragment 。
这是我包括范围的地方:
<html lang="en">
<head>
<title> </title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script type="text/javascript" src="rangy.js"></script>
<script type="text/javascript" src="rangy-serializer.js"></script>
<script type="text/javascript">
//...My native js
</script>
</head>
这是这个庞大的图书馆的大致轮廓。我只在这篇文章中包含我认为与我的问题相关的 hte 库部分:
window['rangy'] = (function() {
//This is all the code for rangy
});
这是我的原生 js 中引用 rangey 的部分。最后的 catch block 将错误打印到 html 文档的正文中,因为 android webview 默认情况下不提供此信息:
jsHandler.restoreSelection = function(selectionDetails) {
try{
window.document.body.style.background="yellow";
window.rangy.deserializeSelection(decodeURIComponent(selectionDetails.replace(/\s+$/, "")));
window.document.body.style.background="green";
}
catch(err){
window.document.body.innerHTML = err.message;
}
};
我的应用程序中有一个按钮可以触发 jsHandler.restoreSelection() 函数。当我按下该按钮时,背景从白色变为黄色,但随后该命令捕获异常并用我在顶部发布的错误消息替换正文。我的应用程序设置有什么问题?从我的 Assets 文件夹中的 html 文件引用外部 js 文件的正确方法是什么? (注意:我确实打开了javascript)。
提前致谢!
最佳答案
经过一天的谷歌搜索,我找到了这个页面,它解决了我的问题:Rendering HTML in a WebView with custom CSS我使用 loadDataWithBaseUrl 将数据传递到 webview 中,但我将 baseurl 作为 null 传递,因为我不知道如何处理它。相反,我将传递对我的项目的 Assets 目录的引用。
关于javascript - Android WebView : Using Script Tags to Load an external javascript file from my assets folder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590623/