我开始使用离线网络应用。我有一个小测试应用程序在离线时使用localstorage创建一个简单的abm,我的想法是,当它在线时,应用程序使用php作为后端语言,并在连接回来时同步localstorage和php。
现在,用于将数据保存到localstorage的函数与用于将数据发送到php的函数不同。
是否可以通过dinamically卸载一个JS文件(让我们将其称为offline.js)并加载另一个(online.js)?
或者女巫会更好吗?我应该将所有函数都包含在一个文件中并以动态方式更改监听器吗?
答案 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的动态链接的启发(种类)。