Android WebView:在javascript中,有没有一种方法可以加载另一个javascript文件,并为堆栈

Android WebView: is there a way, in javascript, to load another javascript file and preserve filename/line number information for stack traces?

本文关键字:javascript 加载 方法 另一个 文件 堆栈 一种 WebView 有没有 Android      更新时间:2023-09-26

我有一个WebView。它有一些javascript。我需要动态地、同步地加载更多存储在assets文件夹中的javascript。

当我手动从资产中提取代码并将其作为字符串传递时,eval()工作得很好。

问题是堆栈跟踪对于使用字符串eval引入的代码没有用处。你只需要在(file:///android_asset/..."

有没有其他方法可以从javascript中动态引入javascript代码,从而使堆栈跟踪变得有用?

(仅供参考,我只是使用WebView作为javascript引擎,这样我就可以使用我们现有的许多跨平台javascript。它不会显示任何有用的HTML。)

编辑:

你可以添加这个:

/@ sourceURL=snarkloading.js

对于被求值的字符串,您将得到snarkloading.js作为文件名。

您可以加载这样的脚本。。。

var script = document.createElement('script');
script.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js");
script.onload = function () {
    // Do your thing when script is loaded
    alert('script loaded'); 
}; 
document.documentElement.appendChild(script);

在onload事件处理程序中编写代码。这是代码实际下载并可用的时候。

更新有一种方法可以同步下载脚本。我记得为此使用了jQueryAjax函数和以下选项。

异步(布尔)

默认值:真

默认情况下,发送所有请求异步(即默认情况下设置为true)。如果您需要同步请求,将此选项设置为false。跨域请求和dataType:"jsonp"请求不支持同步操作。注意,同步请求可以临时锁定浏览器,在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,不赞成使用async:false。

您可以在Ajax的jQueryneneneba API文档中阅读更多关于这方面的内容。该文档指出,它在jQuery 1.8中已被弃用。但是,如果你能找到一个旧版本,你可以使用它,或者弄清楚它们是如何做到的