如何在查看来源时阻止Chrome刷新页面?


18

在谷歌浏览器中查看页面源时,浏览器会打开一个新选项卡,并基本上将URL粘贴到 view-source: 字首。这是不可取的。

作为开发人员,我可能会包含一些仅在提交表单后在源中可见的诊断输出。当Chrome刷新页面以查看来源时,会使此信息消失。

反正有没有阻止这种行为?

注意: 我熟悉“Inspect Element”选项。这不是查看您正在查看的确切页面的原始页面源的充分替代方法。


快速测试脚本

<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> 

更新

显然这个 窃听器 已经提交。叹...

如果有人知道一个好的工作,我会非常感激。


那里的人不明白源不是存储在内存中(由于极简主义)而是被操纵。你应该看到评论 code.google.com/p/chromium/issues/detail?id=523#c47 因为这似乎也是一个好主意...
Tom Wijsman

Answers:


12

从错误报告页面, 评论12中提到的解决方法 有效:在开发人员工具中,启用资源跟踪。 (如果它已关闭,启用它将重新提交生成当前可见页面的请求,无论是POST还是GET。)在参考资料列表中,您可以单击主页面以查看服务器返回的源代码。对于POST和GET请求。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

更多信息

我使用一个简单的php文件运行了一些测试,该文件显示了使用的请求方法和POSTed值,代理服务器日志以查看Chrome正在进行的请求,以及 chrome://net-internals/view-cache/ 用于查看Chrome缓存的前缀。

使用“查看源”命令时,Chrome会显示其来源 缓存版本 页面,它只缓存通过GET方法请求的页面。

如果您正在查看之前使用GET和POST请求的页面,则只缓存GET版本。使用View Source命令不会重新请求页面,但会显示缓存的GET版本,而不是当前可见的POST版本(如果有)。

如果您正在查看仅使用POST方法请求的页面,则使用“查看源”命令将导致Chrome查看其缓存,找不到任何内容,使用GET请求页面,缓存它并显示源代码那个。


好发现!
Tom Wijsman

1
自从这个答案以来,Chrome已经发生了很大变化,但它基本相同:开放式开发工具,确保记录网络流量并找到“网络”选项卡中记录的请求。对于重定向请求,您可以选中“保留日志”或“在导航时预先记录日志”,以便不会删除每个新同步请求的日志。
Jon z

1
@Jonz意识到这种愚蠢之后我已经不喜欢谷歌Chrome了。对于例如我需要检查电子商务网站的谢谢页面的页面来源(用户成功付款后加载的页面,用于检查GTM代码的触发)。现在加载页面时,我只是取消设置必要的会话,如果找不到会话则重新加载,我将用户重定向到主页。因此,如果我尝试使用谷歌Chrome浏览器,我永远无法查看页面源,因为它只能重新发送GET和POST请求,但它无法重置会话。因此我建议 use "Inspect Element"
Abhishek Madhani

1
@AbhishekMadhani我不确定你的意思是回复我,但我会重复我在下面评论中所写的内容 - 似乎从Chrome Canary 37开始,一个新的网络请求是 查看源时发送。
Jon z

2

好问题 - 阅读所有那些“这是错误的”或“这不会起作用”的评论有点令人失望。在许多情况下,此行为使“查看页面源”功能对开发无用。

有一个扩展称为“ 快速源查看器 “,这似乎实际上显示了当前加载的页面的来源(虽然我没有使用POST请求测试它)。


0

很抱歉告诉你,但这违反了浏览器浏览和调试的当前性质......

原始源不会保留在内存中,但会尽快解析并转换为解析树,以防止无用的内存使用。因此,您隐藏在源中的任何调试信息都将丢失,并且必须明确请求。在所谓的Web 2.0站点中,元素也会发生变化,这就是检查的原因......

解决方案1: Fiddler Web调试器 允许您检查HTTP流量,
这允许您查看上次请求的调试信息。

解决方案2: 嵌入调试信息或最后附加,
或者可以将其显示为弹出窗口或以其他令人敬畏的方式显示,不会影响您的布局。


12
TomWij,“这违背了浏览器中浏览和调试的当前性质......”这只是简单的不准确。当前版本的Firefox和Safari都表现为“预期”。事实上,因为我已经在其他浏览器中使用过这些功能,所以我开始期待它们在Chrome中使用。在内存中保留原始源的几KB纯文本应该没有困难。
macek

谷歌Chrome以其极简主义而闻名。 ;-)
Tom Wijsman

3
这显然是错误的。在Chrome中,您可以保存页面的原始来源(另存为页面),而无需执行第二次请求。这是我在“查看源代码”时应该显示的内容。目前的实施是非常不受欢迎的。例如,查看POST的结果时。查看源当前对同一位置执行GET,显示完全不同的页面。查看源应始终显示页面的状态 当前 请求,而不是将来的请求。
Chris

6
毫无疑问,这也是View Source应该从中读取的地方。一个新的要求只是误导和错误。
Chris

2
@Jonz你是否在争论完全删除View Source功能?如果唯一的选择是当前破坏的实现,我会支持这个。但为什么我们不能同时拥有?当您需要该级别的信息时,单击开发工具栏中的网络日志是一个很好的选择,但如果您只是想查看当前页面的来源,那么它似乎有点过分。
Chris
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.