【发布时间】:2011-11-22 10:52:15
【问题描述】:
我正在调试一个用 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 的控制台窗口中: 01职位 02位置 03位置 04位置
我可以启用比“MyFun()”更早的“onInitFun()”函数吗?或者我应该把“MyFun()”放在哪里,所以它可以在“onInitFun()”之后调用。我不希望用户单击一个按钮,因为 MyFun 只是在加载时进行预处理工作。我可以生成一条消息,所以“MyFun()”会比“onInitFs()”更晚被调用吗?
【问题讨论】:
-
你为什么不从
onInitFs()内部调用MyFun()? -
@Andrey,如果
MyFun是一个调试函数,那么我们可能不想将调试代码直接注入“真实”代码中。
标签: javascript html debugging filesystems javascript-debugger