2008-09-10 36 views
12

Vì vậy, các doanh nghiệp nhỏ tại nơi làm việc hiện tại của tôi muốn thử và vô hiệu hóa nút quay lại cho một số trang nhất định. Chúng tôi có một trang nơi người dùng thực hiện một số lựa chọn và gửi chúng để được xử lý. Trong một số trường hợp, họ phải nhập nhận xét trên một trang khác.Ngăn sử dụng nút quay lại (trong IE)

Những gì người dùng đã tìm ra là họ không phải nhập nhận xét nếu họ gửi thông tin và đi tới trang có nhận xét rồi nhấn nút quay lại để quay lại trang trước.

Tôi biết có một số giải pháp khác nhau cho điều này (và nhiều trong số đó là thanh lịch hơn nhiều sau đó vô hiệu hóa nút quay lại), nhưng đây là những gì tôi còn lại. Có thể ngăn người khác quay lại trang trước thông qua thay đổi hành vi của nút quay lại hay không. (giống như gửi -> trả lại điều sorta sai).

Do thông tin đăng gấp đôi, tôi không thể quay lại trang trước và sau đó chuyển sang trang hiện tại. Tôi chỉ có thể có nó không trực tiếp từ trang hiện tại. Tôi đã google, nhưng tôi chỉ thấy các bài viết nói rằng nó sẽ luôn trở về trang trước. Tôi đã hy vọng rằng ai đó có một số kỹ năng kung foo js điên có thể làm cho điều này có thể.

Tôi hiểu rằng mọi người đều nói đây là một ý tưởng tồi, và tôi đồng ý, nhưng đôi khi bạn chỉ cần làm những gì bạn được bảo.

+2

+1 trong sự cảm thông cho phải DTWT đôi khi. – Simon

+0

4GuysFromRolla đã kiểm tra kỹ lưỡng "Vô hiệu hóa nút quay lại". Tôi khuyên bạn nên đọc bài viết đó, họ cũng cho bạn biết lý do tại sao nó sẽ không hoạt động (trong mọi tình huống). – Espo

Trả lời

1

Vô hiệu hóa nút quay lại có vẻ là cách tiếp cận "bạo lực".

Một tùy chọn khác là bạn có thể chuyển sang hộp thoại phương thức không có nút lệnh, hướng dẫn người dùng thông qua quy trình làm việc và đóng hộp thoại khi quá trình hoàn tất.

+0

Tôi hoàn toàn đồng ý với bạn, nhưng tôi đã được cho biết đây là những gì tôi bị mắc kẹt. – kemiller2002

+0

Bạn không bị mắc kẹt với nó - bạn không thể. Nó không phải là một giải pháp khả thi, hợp lệ hoặc đạo đức. Sửa mã số – lordscarlet

2

Bạn có thể chuyển nhận xét đó sang trang trước và đặt trường đó thành trường bắt buộc không?

Vô hiệu hóa nút quay lại sẽ không hoạt động.

3

Bạn có quyền truy cập vào mã nguồn phía máy chủ không? Nếu vậy, bạn có thể đặt một kiểm tra trên trang đầu tiên chuyển hướng đến trang thứ hai nếu thông tin đã được gửi (bạn sẽ cần phải sử dụng các phiên cho điều này, rõ ràng). Tại một công việc cũ, đây là cách chúng tôi xử lý các ứng dụng nhiều bước (ứng dụng như trong đơn xin chấp nhận).

0

Đơn giản là không có cách nào đáng tin cậy để thực hiện việc này. Bạn không thể đảm bảo rằng 100% thời gian bạn có thể ngăn người dùng thực hiện việc này.

Với ý nghĩ đó, có đáng để đi đến các giải pháp cực kỳ kỳ lạ để vô hiệu hóa "phần lớn" thời gian không? Đó là để bạn quyết định.

Chúc may mắn.

2

Vì sự cô lập bảo mật của javascript trong trình duyệt, bạn không thể thay đổi nút quay lại.

Có lẽ bạn có thể lưu trữ nội dung nào đó trong phiên của người dùng cho biết rằng nhận xét là cần thiết và có bất kỳ trang nào trong ứng dụng mà người dùng cố gắng tải chuyển hướng đến trang nhận xét không?

Điều gì xảy ra nếu người dùng đóng trình duyệt khi họ nhận được trang nhận xét của anh ấy?

Tôi biết rằng bạn chưa được lựa chọn ở đây, nhưng vì những gì họ yêu cầu dường như là không thể ...

Có lẽ bạn chỉ có thể không xem xét mục là đã hoàn thành cho đến khi người dùng nhập nhận xét. Vì vậy, bạn sẽ cần phải theo dõi cả các mục đang tiến hành và các mục đã hoàn thành và tạo sự khác biệt đó trong giao diện người dùng, nhưng đây có thể là phương pháp mạnh mẽ nhất.

Hoặc chỉ cần đặt trường nhận xét trên trang biểu mẫu?

4

Tôi đã nhìn thấy điều này trước:

window.onBack = history.forward(); 

Nó chắc chắn là một bẩn hack và, nếu có thể, tôi sẽ cố gắng để không vô hiệu hóa các nút quay lại. Và người dùng có lẽ vẫn có thể nhận được xung quanh nó khá dễ dàng. Và tùy thuộc vào bộ nhớ đệm, không có thông báo nếu mã máy chủ sẽ được xử lý hoặc nếu trang được lưu trong bộ nhớ cache có JavaScript sẽ chạy trước tiên.

Vì vậy, vâng, sử dụng có nguy cơ của riêng bạn :)

+0

Mã của bạn có bị hỏng "yêu cầu" này không? "Do thông tin đăng gấp đôi tôi không thể đưa nó trở lại trang trước và sau đó chuyển sang trang trước. Tôi chỉ có thể có nó không trực tiếp từ trang hiện tại" – Espo

+0

Tôi đã sử dụng ứng dụng web đã thực hiện điều đó trước đây và đó là một trong những điều khó chịu nhất từ ​​trước đến giờ. –

+0

Đồng ý, tôi ghét các trang web làm điều này - tôi nghĩ rằng nó phá vỡ web. Tôi cũng không tham gia vào các yêu cầu về dự án sử dụng kỹ thuật cụ thể này :) –

5

Không, bạn đang phải chịu số phận. Ngay cả khi bạn bật trang lên trong một số trình duyệt khác và ẩn nút quay lại, luôn có phím Backspace.

Vấn đề với những người tiếp thị và các loại phân tích là một số người trong số họ không hiểu khái niệm cơ bản của trang web là không quốc tịch. Họ không hiểu rằng trang là hoàn toàn, hoàn toàn không biết của trình duyệt bằng cách sử dụng nó và kiểm soát tuyệt đối của trình duyệt là hoàn toàn bên ngoài khả năng của các trang web.

Cách tốt nhất để ngăn người dùng nhấn nút quay lại là đảm bảo rằng trang của bạn mất tất cả dữ liệu khi họ nhấn lại, ví dụ: trang nhận xét là điểm duy nhất để lưu dữ liệu và nếu họ nhấn nút quay lại, họ phải làm mọi thứ tất cả lại (suy nghĩ dọc theo dòng pragma: nocache).

Người dùng sẽ phàn nàn, chắc chắn, nhưng họ là lý do khiến yêu cầu này tồn tại, phải không?

+1

Thông thường, người dùng thực sự không yêu cầu shit ngu ngốc như vậy, mặc dù ... – SamB

41

Đừng làm điều này, chỉ cần không. Thiết kế giao diện kém và buộc trình duyệt của người dùng hoạt động theo cách mà họ không mong đợi.

Tôi sẽ coi bất kỳ tập lệnh nào đã chặn thành công nút quay lại của tôi không hoạt động để trở thành hack, và tôi hy vọng nhóm IE sẽ phát hành bản sửa lỗi bảo mật cho nó.

Nút quay lại là một phần của giao diện chương trình, không phải là trang web của bạn.

Trong trường hợp cụ thể của bạn, tôi nghĩ rằng đặt cược tốt nhất là thêm sự kiện dỡ hàng vào trang cảnh báo người dùng nếu họ chưa hoàn tất biểu mẫu. Nút quay lại sẽ không bị ảnh hưởng và người dùng sẽ được cảnh báo về hành động của họ.

+1

Keith là điểm trên. Bài viết của 4 Guys trước đây được tham chiếu thậm chí kết thúc với: "Sau khi tìm kiếm toàn diện của tôi, tôi thấy rằng vẫn không có cách nào thực sự vô hiệu hóa nút quay lại cho tất cả các trường hợp." Doh! Tôi không cần phải đọc hai bài báo để đọc mà cuối cùng! –

+1

đồng ý Keith. Chúng tôi đã trải qua tình trạng tương tự trong công việc của tôi và sau một thời gian dài, chúng tôi nhận ra rằng sẽ dễ dàng hơn trong việc tái cấu trúc ứng dụng để không cần phải tắt nút quay lại. – Jared

+1

Khi tôi nhấn nút quay lại và trang web giảm lỗi "Trang không còn hợp lệ", tôi không thấy điều này là bất ngờ, tôi nhận ra mình đã làm điều sai, tôi nghĩ hầu hết người dùng sẽ đồng ý với điều này. Bạn cảm thấy tội lỗi khi cố viết lại lịch sử. – stuartdotnet

2

Những gì người dùng đã tìm ra là rằng họ không cần phải nhập một bình luận nếu họ gửi thông tin và đi đến trang web với những nhận xét và sau đó nhấn nút quay lại để trở để trang trước.

Sau đó, chúng có thể đủ thông minh để nhập 'không có bình luận' vào trường nhận xét.

Bạn có thể cố gắng buộc mọi người thêm nhận xét, nhưng có thể bạn sẽ kết thúc với phần mềm không sử dụng được, người dùng khó chịu và vẫn không nhận được nhận xét. Đây thường là thời điểm tốt để lùi lại một bước và xem xét lại những gì bạn đang làm từ quan điểm của người dùng.

+1

Điều này cũng chỉ la hét của một số mã xấu. Tại sao mọi người có thể bỏ qua nhận xét bằng cách nhấp vào nút quay lại? Bạn không giải quyết được mã xấu bằng cách hack trình duyệt của người dùng. – lordscarlet

1

Bạn nên bảo mật ứng dụng của mình chống lại việc gửi đôi thay vì phá vỡ giao diện người dùng để ẩn lỗi.

0

Là một giải pháp đơn giản: hãy thử giải pháp này. Chèn một bảng cập nhật và một nút trong đó và sử dụng javascript để ẩn nó và sau đó nhấn nó trên tải trang. Có, tôi hiểu rằng nó sẽ làm cho trang của bạn đăng tải lại khi tải và có thể không hoạt động nếu javascript bị tắt nhưng chắc chắn sẽ giúp bạn đạt được một phản hồi khá tốt cho vấn đề nút quay lại. Andy

4

Tôi nghĩ ra một chút hack vô hiệu hóa nút quay lại sử dụng JavaScript. Tôi đã kiểm tra nó trên chrome 10, firefox 3.6 và IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<title>Untitled Page</title> 
<script type = "text/javascript" > 
function changeHashOnLoad() { 
    window.location.href += "#"; 
    setTimeout("changeHashAgain()", "50"); 
} 

function changeHashAgain() { 
    window.location.href += "1"; 
} 
// If you want to skip the auto-positioning at the top of browser window,you can add the below code: 
window.location.hash=' '; 
var storedHash = window.location.hash; 
window.setInterval(function() { 
    if (window.location.hash != storedHash) { 
     window.location.hash = storedHash; 
    } 
}, 50); 


</script> 
</head> 
<body onload="changeHashOnLoad(); "> 
Try to hit the back button! 
</body> 
</html> 
+0

trong IE9, nó làm cho trang cuộn lên trên cùng và sẽ không cho phép tôi cuộn trang – chrism

0

Bạn có thể ngăn chúng quay trở lại trang trước đó. location.replace() thay thế nhập lịch sử của trang hiện tại với một trang mới, vì vậy ...

page1.html: dùng nhấp một liên kết mà đi đến page2.html

page2.html: dùng nhấp một liên kết mà các cuộc gọi location.replace('page3.html');

page3.html: dùng nhấp lại nút và đi vào page1.html

này có thể không phù hợp tốt với làm một POST, nhưng bạn có thể gửi dữ liệu đến một dịch vụ web thông qua AJAX, sau đó gọi location.replace ()

0

Nếu bạn đang bắt đầu một ứng dụng web mới từ đầu hoặc bạn có đủ thời gian để làm lại ứng dụng của mình, bạn có thể sử dụng JavaScript và AJAX để tránh các chức năng lịch sử, quay lại và chuyển tiếp của trình duyệt.

  • Mở ứng dụng của bạn trong cửa sổ mới, trước hoặc ngay sau khi đăng nhập.
  • Nếu bạn muốn, hãy sử dụng các tùy chọn cửa sổ để ẩn thanh điều hướng (bằng các nút quay lại và tiến lên).
  • Sử dụng AJAX cho tất cả các yêu cầu máy chủ, mà không bao giờ thay đổi URL vị trí của cửa sổ.
  • Sử dụng API web đơn giản để lấy dữ liệu và thực hiện các tác vụ và hiển thị ứng dụng bằng JavaScript.
  • Sẽ chỉ có một URL trong lịch sử của cửa sổ.
  • Nút quay lại và tiến lên sẽ không làm gì cả.
  • Cửa sổ có thể tự động đóng khi đăng xuất.
  • Không có thông tin nào bị rò rỉ vào lịch sử trình duyệt, có thể giúp bảo mật.

Kỹ thuật này trả lời câu hỏi, nhưng nó cũng mâu thuẫn với thực hành tốt nhất bằng nhiều cách:

nút
  • Mặt sau và phía trước nên cư xử như mong đợi.
  • Ứng dụng không được mở cửa sổ trình duyệt mới.
  • Ứng dụng sẽ vẫn hoạt động mà không có JavaScript.

Vui lòng xem xét kỹ các yêu cầu và người dùng của bạn trước khi sử dụng kỹ thuật này.

0

Tôi không thấy giải pháp này:

function removeBack(){ 
 
\t window.location.hash="nbb"; 
 
\t window.location.hash=""; 
 
\t window.onhashchange=function(){window.location.hash="";} 
 
}

+0

Điều này có thể không hoạt động trong Internet Explorer 2008: D –

Các vấn đề liên quan