我想写一个小的html文件,它会在本地运行并操作我的计算机上的一个小文本文件。我的要求是:
这有可能吗?如果是,我如何使用javascript读取和写入我的文本文件?
答案 0 :(得分:8)
正如在Itay Moav的回答中所讨论的那样,使用本地HTML文件写入本地文件可能会成为一个问题,而无需在提升的权限模式下运行并具有其他Javascript功能(允许您保存本地文件)
但是,完全可以从HTML文件访问本地文件。下面是一些示例代码。
<强> mytext.txt 强>
My local text file
<强> local.html 强>
<html>
<head>
<base href="file:///C:/path/to/your/folder/"/>
<script>
window.onload = function(){
var iframe = document.createElement('iframe');
iframe.id = 'iframe';
iframe.style.display = 'none';
document.body.appendChild(iframe);
iframe.src = 'mytext.txt';
setTimeout(function(){
var text = document.getElementById('iframe').contentDocument.body.firstChild.innerHTML;
alert(text);
}, 1000);
}
</script>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
这将在html页面加载后1秒发出警报(以允许首先加载iframe),并将包含mytext.txt文件中的内容。
注意,如果它是纯文本,Firefox会用PRE元素包装它,这就是我firstChild
的原因。另外,请注意使用BASE元素,该元素使用您的文件指向您的本地目录。
答案 1 :(得分:8)
Jared给出的例子很好。然而,设置未知的观看时间并不吸引人。而是将一个onload事件附加到iframe,调用一个函数来读取文本文件的内容,尽快做任何事情。
这是一个修改过的例子:
<html>
<head>
<script>
function readfile() {
alert(document.getElementById('iframe').contentDocument.body.firstChild.innerHTML);
}
</script>
</head>
<body>
<iframe id='iframe' src = 'test.txt' onload='readfile()'> </iframe>
<h1>Hello World!</h1>
</body>
</html>
文件test.txt off course必须与上面的html文件本身存在于同一目录中。
答案 2 :(得分:3)
通常情况下,这是不可能的,也是一个安全问题 但是,如果您使用某些插件(ActiveX,FF扩展等),它们可能会使您这样做 您还可以使用最新浏览器使用本地存储主题。
从您的评论中,我想知道为什么不使用PHP / Ruby任何其他服务器端语言来这样做?它们专为此而量身定制。
答案 3 :(得分:1)
您还可以使用hta文件扩展名,它会在您有权访问ActiveX对象的IE中加载。紧要关头,您可以非常轻松地快速启动并运行可执行程序。
相关代码为:
<!DOCTYPE html>
<html>
<head>
<HTA:APPLICATION
ID="somethingHere"
APPLICATIONNAME="YouAppsName"
WINDOWSTATE="maximize"
>
<script language="JScript">
function ReadFile(filename) {
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.OpenTextFile(filename, 1);
var contents = fh.ReadAll();
fh.Close();
return contents;
} catch (Exception) {
return "Cannot open file :(";
}
function WriteFile(filename, text) {
try {
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fh = fso.OpenTextFile(filename, 8, true);
fh.Write(text);
fh.Close();
} catch(Exception) {
alert("Failed to write.");
}
}
.....
</script>
etc.....