我很确定答案是不,因此有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上的“My Pictures”文件夹并进行读写操作。这是正在开发中的事情,但它不会很快准备好。以下是编写文件的示例:
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');