我正在调试一个用 Javascript 编写的复杂程序。我需要观察一个大矩阵的变化。使用 Chrome Inspect Element 查看矩阵中的每个元素并不方便。所以,我想将数据写入文本文件。我找到了 FileSystem API 和终端。
我已经将 FileSystem API 集成到我的项目中,参考 FileSystem 终端项目。我定义了一个全局变量来存储 fs.root 。我想要的是在调试时将此变量传递给我的程序,这样我就可以使用这个 fs.root 将数据转储到文本文件中。我请求文件系统:
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler); // 5MB
但是“onInitFs”函数似乎是一个消息响应函数,调用得很晚。即使在“onLoad='MyFun();'”之后。所以,我不知道把我自己的函数放在哪里,以确保定义了变量“fs.root”。现在,我把“MyFun()”放到了任何地方,都会产生一个“fs.root”没有定义的错误,因为“onInitFs”函数没有被调用。我已经测试了调用顺序:
-------------main.html
<html>
<header>
<script type='text/javascript' src='MyFun.js'></script>
<script type='text/javascript' >
console.log('01Position');
function onInitFs(fs)
{
aGlobalFsRoot = fs.root;
console.log('04Position');
}
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler);
</script>
</header>
<body onLoad="MyFun();">
<script>
console.log('02Position');
</script>
</body>
</html>
-------------MyFun.js
var aGlobalFsRoot;
function MyFun()
{
console.log('03Position');
// want to use "aGlobalFsRoot" to dump some matrix data, but it is not defined, which means "onInitFs()" is still not called.
}
所以,在 Chrome Inspect Element 的控制台窗口中: 01Position 02Position 03Position 04Position
我可以启用比“MyFun()”更早的“onInitFun()”函数吗?或者我应该把“MyFun()”放在哪里,所以它可以在“onInitFun()”之后调用。我不希望用户单击一个按钮,因为 MyFun 只是在加载时进行预处理工作。我可以生成一条消息,所以“MyFun()”会比“onInitFs()”更晚被调用吗?