Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iframe中的访问调用堆栈_Javascript_Html - Fatal编程技术网

Javascript iframe中的访问调用堆栈

Javascript iframe中的访问调用堆栈,javascript,html,Javascript,Html,由于chrome开发工具在我的学校电脑(chromebook)上被阻止,我必须构建自己的开发工具进行调试 我选择使用html文件进行调试。这就是我现在拥有的:一个用于源代码的巨大文本区,一个用于调试的控制台,以及一个用于显示结果的iframe 每当在iframe中调用log()时,我都想查看调用堆栈。以下是我的日志代码(作为console.log的替代品): 然而,结果是: 源代码输入:函数abc(){log(123);};abc() 控制台输出: < Error at o

由于chrome开发工具在我的学校电脑(chromebook)上被阻止,我必须构建自己的开发工具进行调试

我选择使用html文件进行调试。这就是我现在拥有的:一个用于源代码的巨大文本区,一个用于调试的控制台,以及一个用于显示结果的iframe

每当在iframe中调用
log()
时,我都想查看调用堆栈。以下是我的日志代码(作为
console.log
的替代品):

然而,结果是:

源代码输入:
函数abc(){log(123);};abc()

控制台输出:

<  Error
       at outputIframe.contentWindow.log (<anonymous>:244:34)
       at refresh (<anonymous>:260:47)
       at HTMLIFrameElement.outputIframe.onmouseenter (<anonymous>:235:25)
--------------------------------------------------------------------------
<  123
这就是我想要的:

<  Error
       at abc (<anonymous>:1:16)
       at <anonymous>:1:27
--------------------------------------------------------------------------
<  123
或:

<123
在log(某处:1:16)//这行实际上并不重要
美国广播公司(:1:16)
时间:1:27
简而言之,我想访问iframe中的调用堆栈。有什么想法吗

先谢谢你


另外,因为我的电脑是chromebook,所以我不需要浏览器兼容性。我使用的浏览器总是google chrome的最新版本。

这并不能回答您的直接问题,但为什么不使用firebug lite呢?您可以获得所描述的功能,以及更多:

功能测试(){
log((新错误).stack);
}
test()

只需使用firebug lite
我将
(新错误)。将
堆栈在iframe中,而不是我的编辑器源代码,它解决了我的问题

为了防止在卸载之前出现
弹出窗口和
类型错误:分配给常量变量。
,我更新iframe的方法是完全删除它,然后将它的克隆放回(也许我应该使用
location.reload()
并更改
addEventListener()

所以,我只是在iframe中添加了一行脚本,并在放入实际内容之前将其删除

outputIframe.contentWindow.document.write('<script>window.log = function(a){parent.consoleDisplay((new Error).stack);parent.consoleDisplay(a);}<\/script>');
outputIframe.contentWindow.document.close();     //log function will be saved and
outputIframe.contentWindow.document.write('');   //event listeners will not be saved
outputIframe.contentWindow.addEventListener("error", (event)=>{consoleDisplay(event.error.stack);});
outputIframe.contentWindow.document.write(things_to_put_in);
outputIframe.contentWindow.document.close();
outputIframe.contentWindow.document.write('window.log=function(a){parent.consoleDisplay((新错误).stack);parent.consoleDisplay(a);}');
outputIframe.contentWindow.document.close()//日志功能将被保存并保存
outputIframe.contentWindow.document.write(“”)//将不保存事件侦听器
OutputFrame.contentWindow.addEventListener(“错误”,“事件)=>{consoleDisplay(事件.错误.堆栈);});
outputIframe.contentWindow.document.write(放入的内容);
outputIframe.contentWindow.document.close();

我认为另一种方法是创建一个脚本元素,附加它,然后删除它。不过我还没有测试过。

当你说blocked时,你是说chrome on chrome books中没有这些功能,还是学校有意屏蔽这些功能?寻找开发工具。这不是一个好答案。应提供基本的开发工具。此外,firebug不久前停止了开发,因为他们的任务成功了。是的,他们应该是,但他们不是。在Chromebook上,Chrome开发者工具通过Chrome策略启用/禁用,Chrome策略由Chrome管理控制台作为Google工作帐户的一部分进行维护。只有他的学校才能享受这些政策。你不了解这个问题并不意味着这不是一个好的答案。我的学校使用goguardian,一个chrome的扩展,来屏蔽我们的网站。如果我们学校的每个人都可以使用inspect,我们只需在扩展名中键入
window.close()
,即可完全禁用该系统。尽管绕过goguardian很容易,但我认为我无法绕过谷歌的警察,因为他们有一个很好的bug报告系统。绕道的方法通常只持续一个月。是的,你说得对。我应该使用别人的代码,这样更方便。我实际上想出了一个办法来回答我的直接问题,以备将来参考。
<  123
       at log (somewhere:1:16)   //this line actually does not matter
       at abc (<anonymous>:1:16)
       at <anonymous>:1:27
outputIframe.contentWindow.document.write('<script>window.log = function(a){parent.consoleDisplay((new Error).stack);parent.consoleDisplay(a);}<\/script>');
outputIframe.contentWindow.document.close();     //log function will be saved and
outputIframe.contentWindow.document.write('');   //event listeners will not be saved
outputIframe.contentWindow.addEventListener("error", (event)=>{consoleDisplay(event.error.stack);});
outputIframe.contentWindow.document.write(things_to_put_in);
outputIframe.contentWindow.document.close();