删除JS文件并包含另一个

时间:2013-03-18 02:29:36

标签: javascript html5 offline offlineapps

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

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

是否可以通过dinamically卸载一个JS文件(让我们将其称为offline.js)并加载另一个(online.js)?

或者女巫会更好吗?我应该将所有函数都包含在一个文件中并以动态方式更改监听器吗?

4 个答案:

答案 0 :(得分:3)

如果浏览器在线,你应该让Function Wrapper启动IF Condition检查。

例如:

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

并以不同方式处理每个函数体。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

var connection = navigator.onLine;

if( connection ){
    //Do AJAX
}else{
    //Do Local Storage.
}

答案 3 :(得分: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'];

如果你有一个所有功能的名称(即:'加载','保存'),你可以简单地将它放在一个循环中。

以上内容避免了所有'if / else'条件分支,这些分支有时会变得烦人,而是尝试使用某种模式。

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