0

我正在使用此函数动态加载 Google Maps API:

App.prototype.loadScript = function(src) {
  $(document.createElement("script")).attr({
    type: "text/javascript",
    src: src
  }).appendTo("body");
};

我将此 URL 作为参数传递:

"//maps.googleapis.com/maps/api/js?v=3.8&sensor=false&language=" + locale + "&callback=window.app.googleMapsCallback"

我第一次加载页面时它工作正常,并且回调触发。但是,当我在 Android 上重新加载页面时,window.app.googleMapsCallback 不会触发。它在 Chrome 和 iOS 浏览器中运行良好。

就像脚本被缓存了,只是没有再次重新加载。我尝试向 URL 添加时间戳参数,但这没有帮助。

如何确保回调始终触发?

更新:

经过进一步测试,清除缓存和重新加载也不起作用。我必须清除所有浏览器数据(通过设置 -> 应用程序 -> 管理应用程序)才能成功重新加载页面。

使用顶级函数作为回调没有区别。

重新加载时没有 JavaScript 错误。

我应该提到我正在使用带有 Android 2.3.4 的 HTC Evo 4G,并且我的应用程序是使用 jQuery Mobile 构建的。

4

1 回答 1

1

我一直在尝试使用 Android 模拟器重现您的问题(版本 2.3.3 和 2.3.5。没有 2.3.4 版本,抱歉),但我无法做到。回调在每次页面重新加载时运行良好。

这是测试 jsfiddle:http: //jsfiddle.net/MartinodF/gbAuL/。它只包含最少的代码来测试您的问题并排除它取决于您的代码库中的其他内容。

你能在你的手机上试试吗?单击 jsfiddle 中的“Debug on mobile”(顶部栏中“Run”右侧的按钮),然后在 Android 中打开它为您提供的 url(类似于http://jsfiddle.net/m/ABC)浏览器。你应该得到一个弹出窗口说“回调调用”。尝试重新加载页面,看看它是否有效。

如果没有,那么我可以尝试使用 2.3.4、HTC Sense 皮肤设备进行进一步测试。

于 2012-02-27T00:32:55.923 回答