我很确定答案是否定的,因此使用了 google gears、adobe AIR 等。
如果我是对的,那么http://tiddlywiki.com是如何工作的?它是持久的并且是用 javascript 编写的。它也只是一个没有外部(服务器端)依赖项的 HTML 文件。跆拳道?它在哪里/如何存储其状态?
我很确定答案是否定的,因此使用了 google gears、adobe AIR 等。
如果我是对的,那么http://tiddlywiki.com是如何工作的?它是持久的并且是用 javascript 编写的。它也只是一个没有外部(服务器端)依赖项的 HTML 文件。跆拳道?它在哪里/如何存储其状态?
Tiddlywiki 有多种保存数据的方法,具体取决于使用的浏览器。正如您在源代码中看到的那样。
HTML5 的 File[ 1 ]、FileWriter[ 2 ] 和 FileSystem[ 3 ] API 在 Google Chrome 的最新开发者频道中可用。FileSystem API 允许您在浏览器知道的空间内读/写沙箱文件系统。例如,您不能打开用户本地 FS 上的“我的图片”文件夹并对其进行读/写。这是正在进行中的事情,但它不会准备好一段时间。写入文件的示例:
window.requestFileSystem(
TEMPORARY, // persistent vs. temporary storage
1024 * 1024, // 1MB. Size (bytes) of needed space
initFs, // success callback
opt_errorHandler // opt. error callback, denial of access
);
function initFs(fs) {
fs.root.getFile('logFile.txt', {create: true}, function(fileEntry) {
fileEntry.createWriter(function(writer) { // FileWriter
writer.onwrite = function(e) {
console.log('Write completed.');
};
writer.onerror = function(e) {
console.log('Write failed: ' + e.toString());
};
var bb = new BlobBuilder();
bb.append('Lorem ipsum');
writer.write(bb.getBlob('text/plain'));
}, errorHandler);
}
}
查看此HTML5 存储幻灯片以获取更多代码片段。
它使用这样的 java 文件引用:
drivers.tiddlySaver = {
name: "tiddlySaver",
deferredInit: function() {
if(!document.applets["TiddlySaver"] && !$.browser.mozilla && !$.browser.msie && document.location.toString().substr(0,5) == "file:") {
$(document.body).append("<applet style='position:absolute;left:-1px' name='TiddlySaver' code='TiddlySaver.class' archive='TiddlySaver.jar' width='1'height='1'></applet>");
}
},
isAvailable: function() {
return !!document.applets["TiddlySaver"];
},
loadFile: function(filePath) {
var r;
try {
if(document.applets["TiddlySaver"]) {
r = document.applets["TiddlySaver"].loadFile(javaUrlToFilename(filePath),"UTF-8");
return (r === undefined || r === null) ? null : String(r);
}
} catch(ex) {
}
return null;
},
saveFile: function(filePath,content) {
try {
if(document.applets["TiddlySaver"])
return document.applets["TiddlySaver"].saveFile(javaUrlToFilename(filePath),"UTF-8",content);
} catch(ex) {
}
return null;
}
}
从技术上讲,你可以做到
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserWrite');
在兼容 netscape 的浏览器(Firefox、Mozilla、Netscape)中,它会询问用户*是否允许文件系统访问,但这不可移植。
*每个浏览器进程一次
javascript 可以访问文件系统吗?
据我所知,不在上述沙箱区域之外。但是,它可以访问具有可调用公共方法的签名 Java 小程序,这些方法可以访问所有文件。我已经做到了,它工作正常并且是跨浏览器的。
签名部分有些涉及,对于专业用途,您可能需要为授权您的身份的代码签名证书付费。从像 Verisign 这样的地方获取它。这样用户至少知道小程序是由谁编写的(如果有帮助的话)。您可以自己免费签名,但在用户首次使用授权时会出现其中一个“可能的安全风险”弹出窗口。
您会认为这种用于文件写入的签名小程序已经存在可供下载,但我无法通过搜索找到任何。如果他们这样做了,您只需将其插入您的页面,学习 API 即可。