从文件中读取字符并使用javascript进行比较

时间:2013-10-22 12:31:02

标签: javascript file character

我只用了两天的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>

1 个答案:

答案 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。