繁体   English   中英

删除JS文件并包含另一个

[英]Remove JS file and include another

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

现在,用于将数据保存到本地存储的功能不同于用于将数据发送到php的功能。

从动力学上讲,是否可以卸载一个JS文件(我们将其称为offline.js)并加载另一个(online.js)?

还是巫婆会是更好的方法? 我是否应该将所有功能都包含在一个文件中,然后动态更改侦听器?

如果浏览器处于联机状态,则应该具有“函数包装器”以启动IF条件检查。

例如:

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

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

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

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

var connection = navigator.onLine;

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

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

在所有逻辑都驻留在其中的函数名称空间中,例如:

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的动态链接的启发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM