2

我开始使用离线网络应用程序。我有一个小测试应用程序,它在离线时使用 localstorage 制作一个简单的 abm,我的想法是,当它在线时,应用程序使用 php 作为后端语言,并在连接恢复时同步 localstorage 和 php。

现在,用于将数据保存到 localstorage 的函数与用于将数据发送到 php 的函数不同。

是否可以从动态上卸载一个 JS 文件(让我们称之为offline.js)并加载另一个(online.js)?

还是女巫会是更好的方法?我应该在一个文件中包含所有功能并动态更改侦听器吗?

4

4 回答 4

3

如果浏览器在线,您应该使用函数包装器启动 IF 条件检查。

前任:

function SaveData(data){
    if(BrowserIsOnline)
        SaveDataToPHPServer(data);
    else
        SaveDataToLocalStorage(data);

并以不同的方式处理每个 Function 主体。

于 2013-03-18T02:38:49.993 回答
2

您无法卸载 javascript 文件。一旦加载,它将始终被加载。您可能需要重新考虑您的设计。

于 2013-03-18T02:44:12.453 回答
1

在现代浏览器中,您可以使用 navigator.onLine 来检查连接。这是规范:http ://www.w3.org/TR/offline-webapps/

var connection = navigator.onLine;

if( connection ){
    //Do AJAX
}else{
    //Do Local Storage.
}
于 2013-03-18T02:42:54.070 回答
0

这是一个可能的解决方案,您可能会发现它很有用...

拥有所有逻辑所在的函数命名空间,例如:

this.fn = {};
this.fn['save'] = function() {};
this.fn['load'] = function() {};

当您的事件被触发时,您只需使用适当的函数,如下所示:

var fn = this.fn['load'];

或者

var fn = this.fn['save'];

然后像往常一样使用“fn”。

您甚至可以按模块分隔函数,例如“online.js”和“offline.js”,其中每个模块具有相同的函数名称,但绑定到自己的命名空间。

当需要重新链接功能时,您可以简单地执行以下操作:

this.fn['load'] = offlineModule.fn['load'];

如果你的所有函数都有一个名称(即:'load'、'save'),你可以简单地将它放在一个循环中。

以上避免了所有有时会令人讨厌的“if/else”条件分支,而是尝试使用一种模式。

但无论如何,这是一个很好的问题,因为我正在开始一个项目的规划阶段,我需要类似于您在问题中描述的内容......到目前为止,这是我拥有的最佳解决方案。基本上受到 Linux 中 SO 的动态链接的启发(有点)。

于 2013-03-18T18:26:02.330 回答