0

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

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

问题是堆栈跟踪对于使用字符串 eval 拉入的代码没有用。您只需在 (file:///android_asset/... 处获得评估)

是否有另一种方法可以从 javascript 中动态提取 javascript 代码,这会使堆栈跟踪变得有用?

(仅供参考,我只是将 WebView 用作 javascript 引擎,因此我可以使用我们现有的许多跨平台 javascript。它没有显示任何有用的 HTML。)

编辑:

你可以添加这个:

/@ sourceURL=snarkloading.js

对于被评估的字符串,您将获得snarkloading.js作为文件名。

4

1 回答 1

2

您可以像这样加载脚本...

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 事件处理程序中编写代码。这是代码实际下载并可用的时间。

更新 有一种同步下载脚本的方法。我记得使用 jQuery Ajax 函数和以下选项。

异步(布尔值)

默认值:真

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

您可以在Ajax 的 jQuery API 文档中阅读更多相关信息。文档声明它在 jQuery 1.8 中已被弃用。但是,如果您可以使用旧版本,则可以使用该版本或弄清楚他们是如何做到的。

于 2012-07-11T18:19:52.943 回答