c#Webbrowser - 通过div id识别javascript函数

时间:2014-07-27 08:07:10

标签: javascript

实际上我在网站上遇到了一些麻烦。 我正在尝试获取由javascript创建的div内容。 可悲的是,我无法弄清楚哪个Javascript实际上正在填充这个div。

我怎么能找到那个剧本?

<div id="messageContent" class="msg_content textBeefy textCenter">
    <script> 
        <form action="http://s124-de.ogame.gameforge.com/game/index.php?page=messages&displayCategory=9&displayPage=1" name="delMsg" method="POST">
            <input id="new_msg_count" type="hidden" value="0" />
            <table id="mailz" class="list" cellspacing="0" cellpadding="0">
                <tbody>
                    <tr class="first">
                    <tr id="TR30739146" class="entry trigger " />
                    <tr id="TR30738105" class="entry trigger alt" />
                    <tr id="TR30734795" class="entry trigger " />
                    <tr id="TR30734031" class="entry trigger alt" />
                    <tr id="TR30731272" class="entry trigger " />
                    <tr class="last" />
                </tbody>
            </table>
        </form>

包括那些TR30739的表格......是由那个未知的脚本创建的。

我试图逐一查看我在firebug中找到的脚本,但我不确定我是否正确地调用它们,并且可能不会注意到它是否是我正在寻找的那个。

1 个答案:

答案 0 :(得分:1)

您的问题归结为:我如何知道修改给定DOM元素的代码?

如果你有机会设置一个&#34; DOM断点&#34;你可以使用Chrome的开发工具(可能还有其他人)来做到这一点。在相关代码运行之前:

  1. 打开页面

  2. 打开开发工具

  3. 右键单击该表,然后单击“检查”

  4. 右键单击DOM窗口中的表格元素,然后选择 Break on ...&gt;子树修改

  5. 然后,当表格被修改后,Chrome将停止脚本并显示JavaScript代码中发生修改的位置。然后,如果你查看调用堆栈,你应该能够找到有问题的代码。

    当然,技巧是在修改表运行的代码之前设置断点。

    Chrome的另一个选择是使用旧的已弃用的变异事件。新的(并且在大多数方面更好)MutationObserver回调不是与修改DOM的代码同步进行的,但旧的突变事件回调是:

    1. 打开空白标签

    2. 打开开发工具

    3. 在控制台中,键入(但不要按Enter键)

      function setBreak() { var elm = document.getElementById("mailz"); if (!elm) { setTimeout(setBreak); return; } elm.addEventListener("DOMSubtreeModified", function() { debugger; }); } setBreak();
      
    4. 在地址栏中,粘贴网页的网址,然后尽快**切换回控制台并按Enter键

    5. 当然,如果您可以修改页面内容,只需将其放在script元素中即可。

      该代码查找mailz元素,如果找到它,则在其上设置一个使用DOMSubtreeModified语句的debugger;侦听器。如果代码(还没有)看到该元素,它会安排自己在下次机会时再次运行。当事件触发时,debugger;语句会告知Chrome停止代码并调出源窗格。然后,再次检查调用堆栈。