是否可以使用文件系统访问API来观看文件?

问题描述 投票:0回答:2

我正在开发一个 Chrome 扩展程序,它将提示用户输入一个目录,然后将特定文件从该目录上传到该扩展程序处于活动状态的网站。理想情况下,当这些文件在用户驱动器上发生更改时,此扩展程序会自动上传这些文件。通过文件系统访问 API,我可以设置一个系统,在其中可以轮询文件内容以查看它们是否已更改:

const handles = {
  translation:{handle:null,text:''},
  html:{handle:null,text:''},
  css:{handle:null,text:''}
};
//updateDirectory is triggered by clicking on a "select directory" button
async function updateDirectory(){
  const directoryHandle = await window.showDirectoryPicker();
  Object.keys(handles).forEach((key)=>handles[key] = null);//Clear the preexisting handles.
  //Get the handles for the individual files/directories
  if(handles.interval){
    clearInterval(handles.interval);
  }
  for await (let handle of directoryHandle.values()){
    if(handle.kind === 'file'){
      console.log('handle.name:',handle.name);
      if(handle.name === 'translation.json'){
        handles.translation.handle = handle;
      }else if(handle.name.endsWith('.html')){
        handles.html.handle = handle;
      }else if(handle.name.endsWith('.css')){
        handles.css.handle = handle;
      }
    }
  }
  startFilePoll();
}

function startFilePoll(){
  handles.interval = setInterval(updateSheet,5000);//Check files every 5 seconds
}

async function updateSheet(){
  const filePromises = Object.entries(handles).map(async ([fileType,handle])=>{
    const file = await handle.getFile();
    const text = await file.text();
    if(text !== handles[fileType].text){
      //upload file changes
    }
  });
  await Promise.all(filePromises);
  //Do other things with the changed files.
}

API 文档中是否隐藏了我尚未找到的

watch()
方法,或者扩展程序无需不断轮询即可监视文件状态的其他方法。

javascript google-chrome-extension file-system-access-api
2个回答
3
投票

现在无法观看文件,但有一个针对文件更改事件的建议,这将允许您在将来执行此操作。


0
投票
目前在 Chrome 中对此进行了试用。

要在本地测试文件系统观察器 API,请在

#file-system-observer

 中设置 
about:flags
 标志。
https://developer.chrome.com/blog/file-system-observer

© www.soinside.com 2019 - 2024. All rights reserved.