Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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 Chrome扩展能否将JS文件动态添加到本地扩展目录?用户是否从Web上传或保存?_Javascript_Google Chrome_Firefox_Google Chrome Extension_Firefox Addon Webextensions - Fatal编程技术网

Javascript Chrome扩展能否将JS文件动态添加到本地扩展目录?用户是否从Web上传或保存?

Javascript Chrome扩展能否将JS文件动态添加到本地扩展目录?用户是否从Web上传或保存?,javascript,google-chrome,firefox,google-chrome-extension,firefox-addon-webextensions,Javascript,Google Chrome,Firefox,Google Chrome Extension,Firefox Addon Webextensions,我想知道是否有可能在以后将某些JS文件添加到web扩展目录 比如说,我有一个应用程序,用户可以从应用程序中选择某些设置,这些文件(js和html文件、图像或blob)以某种方式从web添加到扩展中。就像某种ondemand更新程序,不使用任何本机应用程序,但升级似乎是由应用商店自动完成的 我正在使用ajax读取这些文件,并将它们添加到indexeddb中,但因为可能不止一个文件变得凌乱 假设一个用户想要扩展上的某个功能,并且有一个html页面、js文件和图像,然后将其下载到安装的扩展中的某个文件

我想知道是否有可能在以后将某些JS文件添加到web扩展目录

比如说,我有一个应用程序,用户可以从应用程序中选择某些设置,这些文件(js和html文件、图像或blob)以某种方式从web添加到扩展中。就像某种ondemand更新程序,不使用任何本机应用程序,但升级似乎是由应用商店自动完成的

我正在使用ajax读取这些文件,并将它们添加到indexeddb中,但因为可能不止一个文件变得凌乱

假设一个用户想要扩展上的某个功能,并且有一个html页面、js文件和图像,然后将其下载到安装的扩展中的某个文件夹中

function download() { //only saves to downloads directory
  var imgurl = "https://www.google.com.hk/images/srpr/logo11w.png";
  console.log('download');
  browser.downloads.download({url:imgurl},function(downloadId){
      console.log("download begin, the downId is:" + downloadId);
  });
}
我还尝试了上面的chrome下载功能,但这只适用于下载文件夹,而不适用于扩展文件夹


有没有办法制作一个自定义更新程序?!我知道我们不能保存到磁盘,但对扩展文件夹有什么宽大处理或变通方法吗?!甚至一些愚蠢的事情,比如对dos(和linux/mac)进行shell调用,将文件保存到扩展文件夹。我可以获取文件,但不能保存它们。

扩展无法修改它们的源,因为浏览器会验证它们,并在它们更改时重置/禁用扩展。而且,在Firefox中,扩展甚至没有被解包


解决方案实际上非常简单:将代码作为字符串保存在任何存储(localStorage、chrome.storage.local、IndexedDB)中,然后将其作为标准DOM
script
元素添加到扩展页面中。你必须为此付出一点努力。

好的,我把它作为一个答案。这是我所依赖的解决方案,适用于我的场景,我在下面列出了一些备选方案:

  • 将其他文件作为单独的扩展名,并为用户提供一个安装链接,用户可以在其中安装该扩展名,然后这些子扩展名与母扩展名进行通信,并且知道其子扩展文件夹中资源的地址,因此,母亲从子文件夹中获取文件位置,以便从该文件夹加载这些资产。子扩展类似于html和js的捆绑包,有一个后台脚本将这些项的地址发送给母项

缺点是,我必须看看这会如何影响url,比如如果我使用ajax将子扩展文件夹中的html页面注入主界面,那么我不能对其中的任何图像使用相对url,因为url是相对于母扩展文件夹的。。我必须用绝对路径将子扩展URL重写到html页面中,以便从具有相对URL的子扩展html代码加载图像和js

赞成的意见:
  • 比indexeddb更干净、更持久

  • 文件可以从磁盘正常加载

欺骗:
  • 用户必须安装单独的扩展

  • URL结构可能有点混乱,如果从子级加载html,则需要重写URL。然而,这只适用于图像src,并且javascript是从其中加载的,所以这不是什么大问题

其他可能的解决办法:
  • 我已经在做的Indexeddb似乎是实现这一点的首选方法,但我真的不想在Indexeddb中存储所有html资产。好处是,虽然需要安装扩展,但这种方法可以在无需用户交互的情况下以静默方式获取和添加文件,indexeddb似乎有点持久性。可能仍然会使用它,因为它是静默的,但必须从数据库加载每个资产听起来像一场噩梦

  • 如果我只在Firefox上工作,文件句柄Api可能会工作

  • 我还没有尝试过shell拷贝,可能是我使用ajax获取,然后使用一些dos功能保存到磁盘,然后为不同的操作系统执行不同的保存功能

  • 文件系统Api只保存到下载,并且无论如何不适用于扩展,所以这是无用的

更新 在windows中没有任何sudo,但这在没有子文件夹的管理权限的情况下工作(但不在C:\root上)。它可以很好地适用于只支持linux的应用程序。如果我只想将文件保存到windows计算机上,这可能会起作用。

Shell复制方法是使用ajax从本地或远程位置获取文件内容,将其作为流输出到DOS,并保存到windows上的文件中。使用shell exec命令对每个操作系统执行此操作,或者检测操作系统并执行该命令。这样我甚至可以把文件放在确切的文件夹位置

比如说,我从内容中发出这样的命令:

//To append you can use >> instead of >
//folder seems necessary, can't save to root without admin
echo the content I want to save > C:\folder\textfile.txt
我想用只在nodejs中起作用的shell exec来调用它,这样就可以在


shell命令似乎不起作用。我找不到这是干什么用的。在windows的常规javascript中似乎没有shell命令。它似乎需要IE ActiveX。不适用于Firefox或Chrome。

我已经在这样做了,但是有几个文件,所以这是一种非常混乱的方式。我想你当时做错了,但这是另一个问题。你说我做错了是什么意思?怎样?!每个解决方案都取决于场景。您没有显示代码,所以我无法说明如何执行。我所知道的是,这种方法并没有内在的混乱。我知道,它比我想象的要复杂一些,但它似乎仍然是可以用优雅的方式解决的问题,不需要把它夸大为“噩梦”,也不需要被我的评论所冒犯。1)如果您使用IndexedDB库或自己编写一个简单的包装器,那么“必须从数据库加载每个资产听起来像一场噩梦”听起来像是一件微不足道的事情
//full code to save file using javascript on windows
var shell = WScript.CreateObject("WScript.Shell");
shell.Run("echo content to save > C:\folder\textfile.txt");