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

read character from file and compare using javascript

本文关键字:JavaScript 比较 文件 读取 字符      更新时间:2023-09-26

我只有两天的JavaScript和HTML。我使用 C 代码创建了一个命名管道,并能够在其中写入字符。命名管道显示为名为"xyz"的文件。现在我尝试使用 HTML + JavaScript 读取此文件,并访问字符。我想检查该命名管道文件上是否出现字符"c"。我现在正在使用 Ubuntu 终端的 echo 命令写入"xyz"。我能够读取字符并显示在 HTML 窗口中,但比较不起作用。以下是我的代码,在"displayContent()"函数中语句

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>

我认为您的代码无法正常工作 - 我尝试运行它,但无法使用 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 后面的分号:

else;

话虽如此,我做了一个小例子,说明在chrome中工作的东西。

我假设您是通过文件协议加载页面的,如下所示:

file://localhost/Volumes/HD1/Users/user/Sites/readfile/index.html

我的版本使用动态脚本注入而不是XHR,所以不是只写一个字符到'xyz',你必须写一个小的javascript来调用'displayContent',像这样:

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。