Làm cách nào để ngăn Chrome làm mới trang khi xem nguồn?


20

Khi xem nguồn trang trong Google Chrome, trình duyệt sẽ mở một tab mới và về cơ bản sẽ dán URL bằng view-source:tiền tố. Điều này là không mong muốn.

Là nhà phát triển, tôi có thể bao gồm một số đầu ra chẩn đoán chỉ hiển thị trong nguồn sau khi gửi biểu mẫu. Khi Chrome Làm mới trang để xem nguồn, nó làm cho thông tin này biến mất.

Có cách nào để ngăn chặn hành vi này?

Lưu ý: Tôi quen thuộc với tùy chọn "Kiểm tra phần tử". Đây chỉ là một phần không phù hợp để xem nguồn trang thô của trang chính xác mà bạn đang xem.


Một kịch bản thử nghiệm nhanh

<pre>
  <?= print_r($_POST, true) ?>
</pre>
<form action="" method="post">
  <input id="foo" name="foo" value="bar" />
  <input type="submit" />
</form>

Sau khi nhấp vào nút gửi, trang hiển thị

Array
(
    [foo] => bar
)

Nếu bạn xem nguồn trang, bạn sẽ thấy một đầu ra trống $_POST

<pre>
Array
(
)
</pre>
<form action="" method="post"> 
  <input id="foo" name="foo" value="bar" /> 
  <input type="submit" /> 
</form> 

Cập nhật

Rõ ràng lỗi này đã được gửi. Thở dài...

Nếu bất cứ ai biết về một công việc tốt xung quanh, tôi sẽ đánh giá rất cao nó.


Những người ở đó không hiểu rằng nguồn không được lưu trong bộ nhớ (do sự tối giản) mà bị thao túng. Bạn sẽ thấy những nhận xét code.google.com/p/chromium/issues/detail?id=523#c47 như điều đó dường như là một ý tưởng tốt đẹp quá ...
Tamara Wijsman

Câu trả lời:


12

Từ trang báo cáo lỗi, cách giải quyết được đề cập trong nhận xét 12 hoạt động: Trong Công cụ dành cho nhà phát triển, bật Theo dõi tài nguyên. (Nếu nó bị tắt, cho phép nó sẽ gửi lại yêu cầu đã tạo trang hiện đang hiển thị, là POST hoặc GET.) Trong danh sách Tài nguyên, bạn có thể nhấp vào trang chính để xem mã nguồn khi được trả về bởi sever cho cả yêu cầu POST và GET.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Thêm thông tin

Tôi đã chạy một số thử nghiệm bằng cách sử dụng tệp php đơn giản cho thấy phương thức yêu cầu được sử dụng và giá trị POST, nhật ký máy chủ proxy để xem Chrome yêu cầu nào đang thực hiện và chrome://net-internals/view-cache/tiền tố để xem Chrome đang lưu vào bộ đệm gì.

Khi bạn sử dụng lệnh Xem nguồn, Chrome sẽ hiển thị nguồn của phiên bản được lưu trong bộ nhớ cache của trang và nó chỉ lưu trữ các trang được yêu cầu thông qua phương thức GET.

Nếu bạn đang xem một trang mà trước đây bạn đã yêu cầu sử dụng GET và POST, thì chỉ có phiên bản GET được lưu trữ. Sử dụng lệnh Xem nguồn sẽ không yêu cầu lại trang, nhưng sẽ hiển thị phiên bản GET được lưu trong bộ nhớ cache, không phải là phiên bản POST hiện có thể nhìn thấy, nếu có.

Nếu bạn đang xem một trang mà bạn chỉ yêu cầu sử dụng phương thức POST, thì sử dụng lệnh Xem nguồn sẽ khiến Chrome tìm trong bộ đệm của nó, không tìm thấy gì, yêu cầu trang sử dụng GET, lưu vào bộ đệm và hiển thị nguồn điều đó


Khám phá tốt đẹp!
Tamara Wijsman

1
Chrome đã thay đổi rất nhiều kể từ câu trả lời này nhưng về cơ bản là giống nhau: các công cụ phát triển mở, đảm bảo lưu lượng truy cập mạng được ghi lại và tìm yêu cầu được ghi trong tab Mạng. Trong trường hợp các yêu cầu được chuyển hướng, bạn có thể kiểm tra "Bảo toàn nhật ký" hoặc "nhật ký ưu tiên khi điều hướng" để không xóa nhật ký với mỗi yêu cầu đồng bộ hóa mới.
Jon z

1
@Jonz sau khi nhận ra điều điên rồ này, tôi đã không thích Google Chrome. Ví dụ: tôi cần kiểm tra nguồn trang của trang Cảm ơn của trang web Thương mại điện tử (trang được tải sau khi người dùng thực hiện thanh toán thành công, để kiểm tra việc bắn mã GTM). Bây giờ khi tải trang, tôi chỉ cần bỏ đặt phiên cần thiết và một lần nữa vào tải lại nếu không tìm thấy phiên, tôi chuyển hướng người dùng đến trang chủ. Vì vậy, nếu tôi cố gắng sử dụng Google Chrome hack, tôi không bao giờ có thể xem nguồn trang, bởi vì nó chỉ có thể gửi lại yêu cầu GET và POST, nhưng nó không thể đặt lại phiên. Do đó tôi sẽ đề nghịuse "Inspect Element"
Abhishek Madhani

1
@AbhishekMadhani Tôi không chắc là bạn có ý định trả lời tôi, nhưng tôi sẽ nhắc lại những gì tôi đã viết trong một bình luận bên dưới - dường như, đối với Chrome Canary 37, một yêu cầu mạng mới không được gửi khi bạn xem nguồn .
Jon z

2

Câu hỏi hay - và hơi thất vọng khi đọc tất cả những bình luận "điều này là sai" hoặc "điều này sẽ không hiệu quả". Hành vi này làm cho tính năng "Xem nguồn trang" trở nên vô dụng để phát triển trong nhiều trường hợp.

Có một tiện ích mở rộng có tên " Trình xem nguồn nhanh ", dường như thực sự hiển thị nguồn của trang hiện đang được tải (tôi chưa thử nghiệm nó với các yêu cầu POST).


0

Tôi rất tiếc phải nói với bạn, nhưng điều này trái với bản chất hiện tại của trình duyệt và gỡ lỗi trong trình duyệt ...

Nguồn ban đầu không được lưu trong bộ nhớ, nhưng được phân tích cú pháp và chuyển thành cây phân tích càng nhanh càng tốt, điều này để ngăn chặn việc sử dụng bộ nhớ vô dụng. Do đó, mọi thông tin gỡ lỗi bạn ẩn trong nguồn sẽ bị mất và phải được yêu cầu rõ ràng. Trong các trang web được gọi là Web 2.0, các yếu tố cũng thay đổi và đó là lý do kiểm tra là như thế ...

Giải pháp 1: Trình gỡ lỗi web Fiddler cho phép bạn kiểm tra lưu lượng HTTP,
điều này cho phép bạn xem thông tin gỡ lỗi từ yêu cầu cuối cùng của bạn.

Giải pháp 2: Nhúng thông tin gỡ lỗi của bạn hoặc nối nó vào cuối
hoặc có thể hiển thị thông tin dưới dạng cửa sổ bật lên hoặc theo một cách tuyệt vời khác không làm phiền bố cục của bạn.


13
TomWij, "điều này trái với bản chất hiện tại của trình duyệt và gỡ lỗi trong trình duyệt ..." điều này chỉ không chính xác. Các phiên bản hiện tại của Firefox và Safari đều hoạt động như "mong đợi". Trên thực tế, vì tôi đã sử dụng các tính năng này trong các trình duyệt khác, tôi đã mong đợi chúng trong Chrome. Giữ một vài KB văn bản đơn giản cho nguồn gốc trong bộ nhớ sẽ không gặp khó khăn.
macek

Google Chrome được biết đến với sự tối giản. ;-)
Tamara Wijsman

3
Điều này là sai lầm. Trong Chrome, bạn có thể lưu nguồn gốc của trang (Lưu trang dưới dạng) mà không cần thực hiện yêu cầu thứ hai. Đây là những gì sẽ được hiển thị khi tôi "Xem nguồn". Việc thực hiện hiện nay là rất không mong muốn. Ví dụ khi xem kết quả của POST. Xem nguồn hiện đang NHẬN vào cùng một vị trí, hiển thị một trang hoàn toàn khác. Xem nguồn phải luôn hiển thị trạng thái của trang theo yêu cầu hiện tại , KHÔNG phải là yêu cầu trong tương lai.
Chris

6
Không còn nghi ngờ gì nữa, và đó là nơi Xem Nguồn cũng nên đọc từ đó. Một yêu cầu mới chỉ đơn giản là sai lệch và sai.
Chris

2
@Jonz Bạn đang tranh cãi để loại bỏ hoàn toàn chức năng Xem nguồn? Tôi sẽ hỗ trợ điều này nếu giải pháp thay thế duy nhất là triển khai bị hỏng hiện tại. Nhưng tại sao chúng ta không thể có cả hai? Nhấp qua nhật ký mạng trong thanh công cụ dev là một tùy chọn tuyệt vời để có khi bạn cần mức thông tin đó, nhưng nếu bạn chỉ muốn xem nguồn cho trang hiện tại thì có vẻ quá mức cần thiết.
Chris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.