javascript - Android WebView : Using Script Tags to Load an external javascript file from my assets folder

标签 javascript android html android-webview external-js

我有一个带有 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/

相关文章:

javascript - 在 Angular 2 应用程序中将一个属性传递给一个空的新对象

android - Proguard 返回错误代码 1。请参阅控制台 Android

android - Android 上的 Websocket 服务器

android - ListView:如何等到它加载完毕?

javascript - 将 fabric.js Canvas 导出到可打印文件

javascript - 使用 Firefox 扩展的属性触发自定义事件

javascript - for (let i in string) {} 等价于 for (let i = 0; i < string.length; i++) {} 吗?

javascript - 从文本框中删除文本

javascript - Google map 未以 html 形式显示

javascript - 如何动态创建具有 "onclick"事件属性的提交按钮?