在 Google Chrome 中查看页面源代码时,浏览器会打开一个新标签页,并基本上将 URL 和前缀粘贴进去view-source:
。这是不可取的。
作为开发人员,我可能会添加一些诊断输出,这些输出仅在提交表单后在源代码中可见。当 Chrome 刷新页面以查看源代码时,它会使这些信息消失。
有什么方法可以阻止这种行为吗?
笔记:我熟悉“检查元素”选项。但对于查看您正在查看的页面的原始页面源代码而言,这还不够。
快速测试脚本
<pre>
<?= print_r($_POST, true) ?>
</pre>
<form action="" method="post">
<input id="foo" name="foo" value="bar" />
<input type="submit" />
</form>
点击提交按钮后,页面显示
Array
(
[foo] => bar
)
如果你查看页面源代码,你会看到空的 $_POST
输出
<pre>
Array
(
)
</pre>
<form action="" method="post">
<input id="foo" name="foo" value="bar" />
<input type="submit" />
</form>
更新
显然这漏洞已经提交了。唉……
如果有人知道一个好的解决方法,我将不胜感激。
答案1
从错误报告页面,评论 12 中提到的解决方法工作原理:在开发人员工具中,启用资源跟踪。(如果已关闭,则启用它将重新提交生成当前可见页面的请求,无论是 POST 还是 GET。)在资源列表中,您可以单击主页以查看服务器针对 POST 和 GET 请求返回的源代码。
更多信息
我使用一个简单的 php 文件运行了一些测试,该文件显示了所使用的请求方法和 POST 值、代理服务器日志(用于查看 Chrome 发出的请求)以及前缀(chrome://net-internals/view-cache/
用于查看 Chrome 正在缓存的内容)。
当你使用“查看源代码”命令时,Chrome 会显示其源代码缓存版本页面,并且它仅缓存通过 GET 方法请求的页面。
如果您正在查看之前使用 GET 和 POST 请求过的页面,则只会缓存 GET 版本。使用“查看源”命令不会重新请求该页面,但会显示缓存的 GET 版本,而不是当前可见的 POST 版本(如果有)。
如果您正在查看仅使用 POST 方法请求的页面,则使用查看源命令将导致 Chrome 查找其缓存,找不到任何内容,然后使用 GET 请求该页面,将其缓存,并显示其来源。
答案2
好问题——但看到那些“这是错的”或“这行不通”的评论,我有点失望。这种行为使得“查看页面源代码”功能在很多情况下对开发毫无用处。
有一个名为“快速源代码查看器“,它似乎实际上显示了当前加载页面的来源(但我还没有用 POST 请求对其进行测试)。
答案3
很遗憾地告诉你,但这违反了当前浏览器中浏览和调试的本质……
原始源代码不会保存在内存中,而是会尽快解析并转换为解析树,这是为了防止无用的内存使用。因此,隐藏在源代码中的任何调试信息都会丢失,必须明确请求。在所谓的 Web 2.0 网站中,元素也会发生变化,这就是检查如此的原因……
解决方案 1: Fiddler 网络调试器允许您检查 HTTP 流量,
这可以让您查看上次请求的调试信息。
解决方案 2:嵌入您的调试信息或将其附加在末尾,
或者以弹出窗口或另一种不会干扰您的布局的方式显示它。