Phonegap和requirejs动态脚本加载失败
Phonegap and requirejs dynamic script loading fails
我刚开始使用phonegap。我有一个现有的应用程序,它是一个Java servlet容器。我已经编写了一个简单的爬网程序,可以提取所有相关的JS、CSS和图像等。所以我现在有了一个直接的HTML应用程序。它使用requirejs。
我现在正试图用phonegap来构建它。然而,我遇到了以下问题,这可能是一个bug?或者我做错了什么。
发生以下情况:
- 页面加载良好
- 四处点击效果良好
- 应用程序将在后台更改URL(使用Backbone)
- 最后,我单击一个触发requirejs的按钮,requirejs又试图加载脚本
- 当我在安卓虚拟机上使用Chrome调试WebView时,我可以看到以下错误
得到file:///js/step.search-2.0.6-SNAPSHOT.min.jsstep2.0.6-SNAPSHOT.min.js:1未捕获错误:搜索的脚本错误http://requirejs.org/docs/errors.html#scripterror步骤2.0.6-SNAPSHOT.min.js:1
得到file:///js/step.qtip-2.0.6-SNAPSHOT.min.js步骤2.0.6-SNAPSHOT.min.js:1未捕获错误:qtip的脚本错误http://requirejs.org/docs/errors.html#scripterror
得到file:///js/step.quick-lexicon-2.0.6-SNAPSHOT.min.jsstep2.0.6-SNAPSHOT.min.js:1未捕获错误:的脚本错误:quick_lexiconhttp://requirejs.org/docs/errors.html#scripterror
这是个虫子吗?
这是我的requirejs配置
requirejs.config({
waitSeconds: 15000,
paths : {
sidebar: ["js/step.sidebar-STEP_SERVER_VERSION_TOKEN.min"],
quick_lexicon : ["js/step.quick-lexicon-STEP_SERVER_VERSION_TOKEN.min"],
qtip : ["js/step.qtip-STEP_SERVER_VERSION_TOKEN.min"],
view_help_menu: ["js/step.help-menu-STEP_SERVER_VERSION_TOKEN.min"],
drag: ["js/step.draggabilly-STEP_SERVER_VERSION_TOKEN.min"],
menu_extras: ["js/step.menu_extras-STEP_SERVER_VERSION_TOKEN.min"],
html2canvas: ["js/step.html2canvas-STEP_SERVER_VERSION_TOKEN.min"],
search: ["js/step.search-STEP_SERVER_VERSION_TOKEN.min"]
}
});
我还注意到以下行为:
- 如果我打开chrome-dev控制台,并在页面第一次加载时尝试写入标记,则文件加载良好
- 如果在点击一些按钮/菜单后,我也这样做了,那么文件无法加载,可能是因为网络视图中的URL发生了更改
换句话说,如果我在应用程序渲染后,在与之交互之前运行以下代码片段,它就会工作。在与应用程序交互后,它停止工作,并出现与上面相同的错误。
$("head").append('<script src="js/step.2.0.6-SNAPSHOT.min.js" type="script/javascript"></script>')
在头脑中,我注意到requirejs正确地将相对路径而不是绝对路径放置到资源:
<script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="sidebar" src="./js/step.sidebar-2.0.6-SNAPSHOT.min.js"></script>
最后,开发控制台通过window.location.href给出的URL是:
之前:file:///android_asset/www/index.html"在:file:///之后?q=版本=ESV|strong=G0018&选项=HVNUG
所以我无论如何都会发布这篇文章,以防其他人发现同样的问题,但我认为写这篇文章有助于我理解问题的根源。
Chris
因此,可以肯定的是,根本原因是:使用历史URL似乎将浏览器的位置移动到了与android_asset/www/index.html无关的位置,这反过来会中断任何其他脚本的加载。
显然,下一个问题是如何解决这个问题——我将详细讨论这个问题。也许标签会派上用场。但更好的是,修复URL以确保它仍然相对于index.html。这可能是我自己的用例所特有的。
- 当CDN加载失败时,为字体添加一个本地CSS回退
- 一旦第三方脚本加载失败,立即运行一段JavaScript
- 如何检查<对象>是否加载失败
- 在 RequireJS 中处理先决条件加载失败需要功能
- 如何检查选项卡加载失败
- iPhone img 加载失败
- 如何使用 AJAX 加载外部 javascript 文件并知道加载失败
- 如何检查外部javascript是否加载失败
- 角度模块加载失败
- 检查Javascript中图像和视频加载失败的正确方法
- Phonegap和requirejs动态脚本加载失败
- webpack reactjs应用程序加载失败:Uncaught ReferenceError:未定义snapapp
- 使用脚本标记检测Internet Explorer上的xml加载失败
- 如何检测图像加载失败,如果失败,尝试重新加载直到成功
- 为什么第一次加载失败,但后续加载有效
- 媒体源加载失败时没有错误事件
- Angular ng-view -加载失败
- Javascript /jquery:检测iframe页面加载失败
- 获取加载失败的网站的URL
- XHR加载失败:POST