使用 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 上设置本地图像