2

我有一个具有 webview 的 android 项目。此 webview 加载存储在我的资产文件夹中的静态 html 文件。在我的资产文件夹中还有一个第 3 方 javascript 库(范围很广)。我的 html 文件头部的脚本标签中有一些 javascript。该 javascript 引用了 rangy 库中的方法和对象。我让我的 html 文件通过脚本标签引用 rangy。当我尝试使用函数和方法时,我得到一个错误,内容如下:

    Cannot call method '[any method from rangy library]' of 
    undefined

以下是相关的代码片段。

这是我包括范围的地方:

<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>

这是 rangy 库的一个非常广泛的描边。我只在这篇文章中包含我认为与我的问题相关的 hte 库部分:

window['rangy'] = (function() {

//This is all the code for rangy

});

这是我的原生 js 中引用 rangy 的部分。最后的 catch 块将错误打印到 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() 函数。当我按下该按钮时,背景从白色变为黄色,但随后该命令捕获异常并将正文文本替换为我在顶部发布的错误消息。我的应用程序设置有什么问题?从我的资产文件夹中的 html 文件中引用外部 js 文件的正确方法是什么?(注意:我确实打开了 javascript)。

先谢谢了!

4

1 回答 1

4

经过一天的谷歌搜索后,我发现这个页面解决了我的问题:使用自定义 CSS 在 WebView 中渲染 HTML 我使用 loadDataWithBaseUrl 将数据传递到 webview,但我将 baseurl 作为 null 传递,因为我没有不知道怎么处理它。相反,我将传递对我项目的资产目录的引用。

于 2012-05-16T13:39:22.987 回答