当前位置: 首页 > 面试题库 >

是否可以通过某些调试器(例如WebKit,FireBug或IE8开发人员工具)来调试动态加载的JavaScript?

衡泰
2023-03-14
问题内容

从我最近的问题开始,我已经创建了一些JavaScript函数来动态加载部分视图。因此,我无法调试任何动态加载的JavaScript。因为所有加载的JavaScript都将通过“eval”函数进行评估。

但是,我发现了一种使用以下脚本来动态创建脚本到当前文档的标头中的方法来创建新的JavaScript。所有加载的脚本将显示在HTMLDOM中(您可以使用任何调试器找到它)。

var script = document.createElement('script')
script.setAttribute("type","text/javascript")
script.text = "alert('Test!');";

document.getElementsByTagName('head')[0].appendChild(script);

顺便说一下,大多数调试器(IE8开发人员工具栏,Firebug和Google
Chrome)无法在任何动态脚本中设置断点。因为可调试脚本必须在页面加载后的第一时间加载。

您有调试动态脚本内容或文件的想法吗?

更新1-添加测试源代码

您可以使用以下xhtml文件尝试调试someVariable值。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>    
    <title>Dynamic Loading Script Testing</title>
    <script type="text/javascript">
    function page_load()
    {       
        var script = document.createElement('script')
        script.setAttribute("id", "dynamicLoadingScript");
        script.setAttribute("type","text/javascript");
        script.text =   "var someVariable = 0;\n" +
                        "someVariable = window.outerWidth;\n" +
                        "alert(someVariable);";

        document.getElementsByTagName('head')[0].appendChild(script);
    }
    </script>
</head>
<body onload="page_load();">
</body>
</html>

通过回答,我只是在FireBug中对其进行了测试。结果应显示如下图所示。

替代文本http://d7cgnq.bay.livefilestore.com/y1pJGV27qEARXzZhsMMhPD5z0OxAtnkQK8eKeEXMAxuHjsuWeAq1aGl7sTISRNqVv3lw8ghyxE_GorlwSJDvTql0m0und-
XG-
Pugable

请查看页面加载后添加的“ dynamicLoadingScript”脚本。

替代文字http://d7cgnq.bay.livefilestore.com/y1pz_RwqjgeVqe2mAlUZha0PalpPdP0X5AiwJcQhYahERlnbPDdZpb-
_d1e96Q-14raSDMJOBsdcV9jsi4B5yCUDqm41Wc3hbug。

但是在FireBug的脚本选项卡中找不到

更新2-在动态加载脚本中创建调试断点

替代文字http://d7cgnq.bay.livefilestore.com/y1peKdIMOztXss-
pc8PlJEmaGov_0ShYnLsuDdK5OLETbCG0UpkX6Te29w0YW2pNKaD_0ANAiizh2GdGPAAp_1q0JpngEpng4oii/Debugger-
VS2010。

替代文字http://d7cgnq.bay.livefilestore.com/y1pUeHaHoTXj0WBl74fnTrXwdr_y7s7h8jNKfs​​lSONgshzZBpUddGHNBWA9cXRabo3HAl3QazeozrCABo7pNVQc1Acl-
UXXbHFE/Debugger-
GoogleChrome

上面的两个图片都显示了插入“调试器”;脚本的某些行中的语句可能会触发动态加载脚本中的断点。但是,两个调试器都不会在断点处显示任何代码。因此,这样做是没有用的。

谢谢,


问题答案:

同样也可以使用铬。Chrome具有一项功能,您可以指定解析器属性并使动态JS片段显示为文件,然后可以浏览至该文件并设置断点。

需要设置的属性是

//# sourceURL=dynamicScript.js

其中,dynamicScript.js是应在脚本文件浏览器中显示的文件的名称。

更多信息在这里

保罗·爱尔兰(Paul Irish)在其关于工具和Webapp开发堆栈的精彩演讲中也简要地谈到了这一点。



 类似资料:
  • 开发及调试工具 文本编辑器或 IDE (集成开发环境) Google Chrome, Firefox Firebug, Safari Developer Tool NOTE: Google Chrome DevTools Doc

  • > 登录到https://developer.apple.com/account 然后转到这里https://developer.apple.com/download/more 复制了Xcode 8的下载链接,即http://adcdownload.apple.com/developer_tools/xcode_8/xcode_8.xip 我尝试但我只在终端上得到了以下内容: --2016-09-

  • 问题内容: 最近,我通过更复杂的项目更改了编码样式,以“按需”加载页面(及其嵌入式脚本)。但是,很难像加载时那样调试这些脚本: 要么 这些脚本可以完美运行,但是,如果要调试,如何在这些动态加载的页面和脚本中设置断点? 问题答案: 更新 现在,接受的表单带有(标签)而不是(符号) 语法进行了更改,以避免与IE条件编译语句和其他一些问题发生冲突(感谢Oleksandr Pshenychnyy和Varu

  • 可以使用以下样式设置文本输入的占位符: 我正在网上看一个网站,我想使用相同的占位符颜色,因为他们做的。有可能查出他们用的是什么颜色吗?我想包括任何alpha值,所以我不能仅仅用图像编辑器对颜色进行采样。 当我使用Chrome开发工具检查元素时,我看到: Dev tools在检查输入元素时不提供有关placeholder元素的信息。还有别的办法吗?

  • 问题内容: 我需要调试一个使用jQuery进行一些相当复杂和混乱的DOM操作的Web应用程序。某一时刻,某些与特定元素绑定的事件并未触发,只是停止工作。 如果我有能力编辑应用程序源代码,那么我将向下钻取并添加一堆Firebug语句和注释/取消注释代码段,以试图找出问题所在。但是,假设我无法编辑应用程序代码,并且需要使用Firebug或类似工具完全在Firefox中工作。 Firebug非常擅长让我

  • 问题内容: 因此,在我的JavaScript中,我正在对我网站上的服务进行ajax调用。糟糕,失败了。没问题。这是我在Firefox中要做的事情: 打开firebug控制台 查找失败的Ajax调用,然后单击+号以查看更多信息。 响应选项卡具有原始HTML。谁想读所有这些?我单击HTML选项卡。 嗯,Django返回的格式正确的HTML显示了我的零除错误。 现在,这是我目前在Chrome中执行的操作