Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除JS文件并包含另一个_Javascript_Html_Offline_Offlineapps - Fatal编程技术网

Javascript 删除JS文件并包含另一个

Javascript 删除JS文件并包含另一个,javascript,html,offline,offlineapps,Javascript,Html,Offline,Offlineapps,我开始使用离线网络应用。我有一个小测试应用程序,可以在离线时使用localstorage制作一个简单的abm,我的想法是,当它在线时,应用程序使用php作为后端语言,并在连接恢复时同步localstorage和php 现在,用于将数据保存到localstorage的函数与用于将数据发送到php的函数不同 有没有可能,在日常生活中,卸载一个JS文件(让我们称之为offline.JS)并加载另一个(online.JS) 或者巫婆会是一个更好的办法?我是否应该将所有函数都包含在一个文件中,并手动更改侦

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

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

有没有可能,在日常生活中,卸载一个JS文件(让我们称之为offline.JS)并加载另一个(online.JS)


或者巫婆会是一个更好的办法?我是否应该将所有函数都包含在一个文件中,并手动更改侦听器?

您应该使用函数包装器,启动IF条件检查浏览器是否联机

例:


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

在现代浏览器中,您可以使用navigator.onLine检查连接。以下是规格:


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

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

在所有逻辑所在的位置有一个函数命名空间,例如:

this.fn = {};
this.fn['save'] = function() {};
this.fn['load'] = function() {};
当您的事件被触发时,您只需使用适当的函数,如中所示:

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

然后像平常一样使用“fn”

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

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

this.fn['load'] = offlineModule.fn['load'];
如果您对所有函数都有一个名称(例如:“load”、“save”),您只需将其放在一个循环中即可

上述方法避免了所有“if/else”条件分支,这些分支有时会让人恼火,而是尝试使用一种模式


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

您无法卸载javascript。将函数保留在对象内,并交换对象。
var fn = this.fn['load'];
var fn = this.fn['save'];
this.fn['load'] = offlineModule.fn['load'];