我只用了两天的JavaScript和HTML。我使用C代码创建了一个命名管道,并能够将字符写入其中。命名管道显示为名为“xyz”的文件。现在我正在尝试使用HTML + JavaScript读取此文件,并访问这些字符。我想检查该命名管道文件中出现的字符'c'。 我正在使用来自Ubuntu终端的echo命令写入“xyz”。 我能够在HTML窗口中读取字符并显示,但比较不起作用。 以下是我的代码,并在“displayContents()”函数内部使用语句
if('c' == ch)
el.innerHTML = 'z';
else;
即使文件“xyz”仅包含“c”作为其内容,始终为false。 当文件有'c'时,我期待'z'作为输出,否则浏览器窗口中的内容本身。 怎么可以做,请指出我做错的所有事情?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Read File (via AJAX)</title>
<script type="text/javascript">
var reader = new XMLHttpRequest() || new ActiveXObject('MSXML2.XMLHTTP');
var el;
function loadFile()
{
reader.open('get', 'xyz', true);
reader.onreadystatechange = displayContents;
reader.send(null);
}
function displayContents()
{
if(reader.readyState == 4)
{
var el = document.getElementById('main');
ch = reader.responseText;
if('c' == ch)
el.innerHTML = 'z';
else;
el.innerHTML = ch;
}
}
function delay_ms(delay)
{
var now = new Date();
var desiredTime = new Date().setMilliseconds(now.getMilliseconds() + delay);
while (now < desiredTime)
{
now = new Date();
}
}
</script>
</head>
<div id="main"></div>
<body onload = "loadFile();"></body>
</html>
答案 0 :(得分:0)
我不认为你的代码是按原样运行的 - 我试图运行它并且无法使用XHR加载'xyz'。在Chrome中,我得到:
XMLHttpRequest cannot load file://localhost/Volumes/Macintosh%20HD/Users/ajhomer/Sites/readfile/xyz. Cross origin requests are only supported for HTTP. index.html:14
Uncaught NetworkError: A network error occurred.
但是,如果你以某种方式让它工作并且想知道为什么你永远不会把'z'作为innerHTML,那是因为在其他之后的分号:
else;
话虽如此,我举了一些关于chrome的东西的例子。
我假设您正在通过文件协议加载页面,例如:
file://localhost/Volumes/HD1/Users/user/Sites/readfile/index.html
我的版本使用动态脚本注入而不是XHR,所以不必只写一个字符到'xyz',你必须编写一个调用'displayContents'的小javascript,如:
var payload = 'c';
displayContents(payload);
然后是html文件:
<!DOCTYPE html>
<html>
<head>
<title>Read File (via dynamic script injection)</title>
<script type="text/javascript">
function loadFile()
{
var scr = document.createElement('script');
scr.onload = function(e) {
console.log(e);
};
scr.onerror = function(e) {
console.log(e);
}
var cachebuster = Math.round(new Date().getTime() / 1000);
scr.src = 'xyz.js?cb='+cachebuster;
document.head.appendChild(scr);
}
function displayContents(ch)
{
var el = document.getElementById('main');
if('c' == ch)
el.innerHTML = 'z';
else
el.innerHTML = ch;
}
</script>
</head>
<div id="main"></div>
<body onload = "loadFile();"></body>
</html>
这可以更优雅地完成 - 这只是一个快速的POC。