使用 evaluateJavaScript(..) 调用 javascript 函数,以读取应用程序包中的文本文件

Posted

技术标签:

【中文标题】使用 evaluateJavaScript(..) 调用 javascript 函数,以读取应用程序包中的文本文件【英文标题】:Calling a javascript function with evaluateJavaScript(..), to read a text file in the apps bundle 【发布时间】:2017-09-29 16:24:08 【问题描述】:

第一部分工作正常,这意味着 WKWebview 对象能够调用 java 脚本函数。我认为问题出在 javascript 代码中。

被调用的 javascript 函数应该只是从应用程序包中的文本文件 (fileName = "data.txt") 中读取。它看起来像这样:

function readTextFile(fileName)

     var rawFile = new XMLHttpRequest();
     rawFile.onreadystatechange = function()
      
         if(rawFile.status == 4)
          
             document.getElementById("demo").innerhtml = this.responseText;
         
     

    rawFile.open("GET",file,true)
    rawFile.send()  

 

输出始终为空。现在我确定 rawFile 状态达到 4,我检查了一下。我已经用一些虚构的不存在的文件替换了文件名,并且原始文件状态仍然达到 4。所以现在我什至不确定是否找到了该文件。

    有没有办法确定文件是否被找到? 如果找到了如何读出?

我根本不是一个经验丰富的 Java 脚本开发人员。所以这可能是一些明显的问题。我在 w3schools.com 的帮助下编写的 javascript 函数。

谢谢。

【问题讨论】:

【参考方案1】:

我认为您的代码存在一些格式问题,并且您没有添加事件侦听器。试试下面的。 MDN https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

也有更好的文档

function readTextFile() 
  document.getElementById("demo").innerHTML = this.responseText;

function getTextFile(file) 
  var req = new XMLHttpRequest();
  req.addEventListener("load", readTextFile)
  req.open("GET", file, true)
  req.send();
)

getTextFile('example.txt')
<div id="demo">
</div>

【讨论】:

由于请求是异步的,所以添加一个监听器是有意义的,谢谢我不知道如何实现这个。它还没有完全工作,因为函数 readTextfile() 没有被调用。可能还缺少其他东西... 如果文本文件放在应用程序包中,则不会调用函数 readTextFile。虽然如果文本文件位于远程网络服务器上,它会被调用。我最终发现问题在于仅 HTTP 支持跨源请求。这显然是由于安全限制...我会尝试寻找解决方法...

以上是关于使用 evaluateJavaScript(..) 调用 javascript 函数,以读取应用程序包中的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 EvaluateJavaScript 单击按钮的意外行为

使用 evaluateJavaScript 从 WKWebView 获取标题

WKWebView 中的 Javascript - evaluateJavaScript 与 addUserScript

使用 evaluateJavascript 方法在 Cordova 的 WKWebview 上设置本地图像

WKWebView evaluateJavaScript 不返回 html

alert() 在 WKWebview 中不起作用 evaluateJavaScript()