Baseline 2023 *
Newly available
å®å ¨ä¸ä¸æ: æ¤é¡¹åè½ä» å¨ä¸äºæ¯æçæµè§å¨çå®å ¨ä¸ä¸æï¼HTTPSï¼ä¸å¯ç¨ã
夿³¨ï¼ æ¤ç¹æ§å¨ Web Worker ä¸å¯ç¨ã
æä»¶ç³»ç» API ç FileSystemFileHandle
æ¥å£è¡¨ç¤ºä¸ä¸ªæåæä»¶ç³»ç»æ¡ç®ç奿ãå¯éè¿ window.showOpenFilePicker()
æ¹æ³æ¥è®¿é®æ¤æ¥å£ã
注æï¼è¯»åæä½æä¾èµçæä»¶è®¿é®æéå¨å·æ°æå
³é页é¢å¹¶ä¸é¡µé¢æå±çæºæ²¡æå
¶ä»æ ç¾é¡µä¿ææå¼çæ
åµä¸ä¸ä¼ç»§ç»ä¿æãFileSystemHandle
æ¥å£ç queryPermission
æ¹æ³å¯ç¨äºå¨è®¿é®æä»¶åéªè¯æéç¶æã
ä»ç¶ç±» FileSystemHandle
ç»§æ¿å±æ§ã
ä»ç¶ç±» FileSystemHandle
ç»§æ¿æ¹æ³ã
getFile()
è¿åä¸ä¸ª Promise
对象ï¼å¯å
ç°ä¸ä¸ª File
对象ï¼è¯¥å¯¹è±¡è¡¨ç¤ºå¥ææä»£è¡¨çæ¡ç®å¨ç£çä¸çç¶æã
createSyncAccessHandle()
è¿åä¸ä¸ª Promise
对象ï¼å¯å
ç°ä¸ä¸ª FileSystemSyncAccessHandle
对象ï¼è¯¥å¯¹è±¡å¯ç¨äºåæ¥è¯»åæä»¶ãæ¤æ¹æ³çåæ¥ç¹æ§å¸¦æ¥äºæ§è½ä¼å¿ï¼ä½æ¯åªè½å¨ä¸ç¨ç Web Worker ä¸ä½¿ç¨ã
createWritable()
è¿åä¸ä¸ª Promise
对象ï¼å¯å
ç°ä¸ä¸ªæ°å»ºç FileSystemWritableFileStream
对象ï¼å¯ç¨äºåå
¥æä»¶ã
ä¸é¢ç弿¥å½æ°ç¨äºæ¾ç¤ºä¸ä¸ªæä»¶éæ©å¨ï¼ä¸æ¦ææä»¶è¢«éæ©ï¼ä¾¿å¯ä»¥ä½¿ç¨ getFile()
æ¹æ³è·åå
¶å
容ã
async function getTheFile() {
const pickerOpts = {
types: [
{
description: "Images",
accept: {
"image/*": [".png", ".gif", ".jpeg", ".jpg"],
},
},
],
excludeAcceptAllOption: true,
multiple: false,
};
// æå¼æä»¶éæ©å¨
const [fileHandle] = await window.showOpenFilePicker(pickerOpts);
// è·åæä»¶å
容
const fileData = await fileHandle.getFile();
return fileData;
}
åå
¥æä»¶
以ä¸å¼æ¥å½æ°ç¨äºå°ç»å®å 容åå ¥æä»¶å¥æï¼ä»èåå ¥ç£çã
async function writeFile(fileHandle, contents) {
// å建ä¸ä¸ª FileSystemWritableFileStream ç¨æ¥åå
¥ã
const writable = await fileHandle.createWritable();
// å°æä»¶å
容åå
¥å°æµä¸ã
await writable.write(contents);
// å
³éæä»¶å¹¶å°å
容åå
¥ç£çã
await writable.close();
}
åæ¥è¯»åæä»¶
以ä¸å¼æ¥äºä»¶å¤ç彿°å¤äº Web Worker ä¸ä¸æï¼ä»ä¸»çº¿ç¨æ¥æ¶æ¶æ¯ã
ArrayBuffer
æ¥å®¹çº³å®ãonmessage = async (e) => {
// è·åä»ä¸»çº¿ç¨åå¾ worker çæ¶æ¯
const message = e.data;
// è·åè稿æä»¶ç奿
const root = await navigator.storage.getDirectory();
const draftHandle = await root.getFileHandle("draft.txt", { create: true });
// è·ååæ¥è®¿é®å¥æ
const accessHandle = await draftHandle.createSyncAccessHandle();
// è·åæä»¶å¤§å°
const fileSize = accessHandle.getSize();
// å°æä»¶å
容读åå°ç¼å²åº
const buffer = new DataView(new ArrayBuffer(fileSize));
const readBuffer = accessHandle.read(buffer, { at: 0 });
// å°æ¶æ¯åå
¥å°æä»¶æ«å°¾
const encoder = new TextEncoder();
const encodedMessage = encoder.encode(message);
const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
// å°æ´æ¹æä¹
åè³ç£ç
accessHandle.flush();
// ç¨å® FileSystemSyncAccessHandle è®°å¾æå®å
³é
accessHandle.close();
};
夿³¨ï¼ å¨è§èçæ©æçæ¬ä¸ï¼close()
ãflush()
ãgetSize()
å truncate()
被éè¯¯å°æå®ä¸ºå¼æ¥æ¹æ³ï¼å¹¶ä¸æäºè¾æ§çæ¬çæµè§å¨ä»¥è¿ç§æ¹å¼å®ç°å®ä»¬ãç¶èï¼å½åæææ¯æè¿äºæ¹æ³çæµè§å¨é½å°å®ä»¬å®ç°ä¸ºåæ¥æ¹æ³ã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4