【问题标题】:uncaught referenceerror function is not defined javascript android未捕获的referenceerror函数未定义javascript android
【发布时间】:2012-09-05 12:40:37
【问题描述】:

我尝试将 html 页面加载到自定义 webView 我还需要将 4 个 javascript 文件加载到 webView, 当我将 javascript 引用直接放在 html 的 head 标记中时,它们运行良好, 但是当我在运行时从我的 android 函数加载它们时,它们正确加载,但不能工作并捕获“未定义未捕获的引用错误函数”异常。

这是我在两种状态下所做的:

状态1:直接加载引用:

这很好用.....

<html>

<head>
<head>

<script type="text/javascript" src="file:///android_asset/selection/android.selection.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/jquery.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/rangy-core.js"></script>
<script type="text/javascript" src="file:///android_asset/selection/rangy-serializer.js"></script>      
</head>
<body>
......
</body>
</html>

状态 2:从 android 应用程序加载 在 webview 客户端,,, onPageFinished 方法中我输入了这段代码:

String str =  "javascript: (function() { "

            + " var rangycore=document.createElement('script');"
            + " rangycore.type='text/javascript';"
            + " rangycore.src='file:///android_asset/selection/rangy-core.js';"
    +"document.getElementsByTagName('head').item(0).appendChild(rangycore);"

            + " var rangyserializer=document.createElement('script');"
            + " rangyserializer.type='text/javascript';"
            + " rangyserializer.src='file:///android_asset/selection/rangy-serializer.js';"
            + " document.getElementsByTagName('head').item(0).appendChild(rangyserializer);"

            +  " var select=document.createElement('script');"
            + " select.type='text/javascript';"
            + " select.src='file:///android_asset/selection/android.selection.js';"
            + " document.getElementsByTagName('head').item(0).appendChild(select);"

            + " var jquery=document.createElement('script');"
            + " jquery.type='text/javascript';"
            + " jquery.src='file:///android_asset/selection/jquery.js';"
            + " document.getElementsByTagName('head').item(0).appendChild(jquery);})()";


    BTWebView.this.loadUrl(str);

此打印控制台消息“未捕获的引用错误:未定义范围” 虽然 head 标签正确地附加了脚本字符串。

我该如何解决这个问题 谢谢你....

【问题讨论】:

    标签: javascript android


    【解决方案1】:

    在运行时加载 JavaScript 的更简单和优雅的方法是 yepnope,一个 1.7 KB 的小型库。

    yepnope({
      load: [
        "file:///android_asset/selection/android.selection.js",
        "file:///android_asset/selection/jquery.js",
        "file:///android_asset/selection/rangy-core.js",
        "file:///android_asset/selection/rangy-serializer.js"
      ],
      complete: function () {
        alert('loaded successfully');
      }
    });
    

    您将拥有更少的代码,因此您的串联字符串中的错误可能会更少。

    可用的回调可能有助于发现错误或添加有用的功能。

    【讨论】:

      【解决方案2】:

      您在两个示例中以不同的顺序加载文件!

      加载脚本文件的顺序很重要。我猜你有依赖关系,无法解决。

      【讨论】:

      • 您说“状态 1”正在工作。所以你应该在你的“状态2”中使用这个脚本加载顺序。
      • 我建议你在你的包含文件中搜索你上面提到的字符串“rangy is not defined”,找出哪个脚本在抱怨。另一个想法可能是将所有 4 个文件合并为一个(遵循正确的顺序)并在两个场景中测试这个新文件。
      【解决方案3】:

      试试看:- 如果应用以 LOLLIPOP 或更高版本为目标,则默认 Web 视图行为是完全拒绝混合内容。由于移动连接需要在标头丰富期间使用 HTTP,因此我们需要更宽松的安全设置。 if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_‌CONTENT_COMPATIBILIT‌Y_MODE); }

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多