2013-02-17 27 views
9

Tôi sẽ triển khai đăng xuất trong ứng dụng PhoneGap của mình, ứng dụng này sẽ đưa người dùng trở lại trang xác thực (có các trường đã xóa). Đối với nút Tôi đang sử dụng neo với sự kiện onclick:Có thể onclick = "history.clear();"

<script type="text/javascript"> 
function doLogout() { 
    var backlen = history.length; 
    history.go(-backlen); 
    window.location.replace("index.html"); 
} 
</script> 

<a data-role="none" href="#" onclick="doLogout"></a> 

nhưng nó không hoạt động, ví dụ: nó chỉ trả về cho tôi đến trang xác thực với fileds đã điền, có vẻ như chỉ là một bước lùi. Tôi không chắc chắn cho history.clear(), vì googling nó đã cho tôi không có gì:

<a data-role="none" href="index.html" onclick="javascript:history.clear();"></a> 

bất cứ ai có thể tư vấn cho tôi đâu là vấn đề của tôi? Nếu có một giải pháp khác để xử lý sự kiện đăng xuất trong PhoneGap, tôi sẽ theo dõi nó. THanks

Trả lời

13

Cuộc gọi tới history.go sẽ bị bỏ qua, bởi vì bạn sẽ quay lại một bước nữa so với các mục trong lịch sử. Thuộc tính length có số mục bao gồm mục hiện tại, vì vậy nếu có ví dụ bốn mục trong lịch sử, bạn chỉ có thể quay lại ba bước.

Để quay trở lại bước đầu tiên, bạn sẽ trừ đi một từ chiều dài:

history.go(-(history.length - 1)); 

Tuy nhiên, đó chỉ có thể đưa bạn trở lại trang chủ của bạn nếu bạn mở một cửa sổ mới đặc biệt cho trang đó. Nếu không, nó sẽ đưa người dùng trở lại trang đầu tiên mà anh ta đã truy cập bằng cửa sổ đó.


Không có phương pháp clear cho đối tượng history.

Ref: https://developer.mozilla.org/en-US/docs/DOM/window.history

Lịch sử trình duyệt thuộc về người sử dụng, bạn không thể xóa bất cứ điều gì từ nó.

+0

cảm ơn vì lời giải thích rõ ràng – Dozent

+0

Ah, nhưng điều gì xảy ra khi người dùng nhấp lại và bạn chạy mã này? 'history.length' không thay đổi khi Back được nhấp, nhưng chạy mã đó sẽ vượt quá lịch sử. Có vẻ như có một con trỏ bên trong mà chúng ta không thể nhận được giá trị của: ( –

+0

@Jack: Điểm tốt. Bạn không có nhiều quyền kiểm soát lịch sử trình duyệt, vì vậy dường như không có giải pháp nào hoạt động cho – Guffa

1

Nếu bạn sử dụng thuộc tính onclick, những gì nằm trong dấu ngoặc kép là một tuyên bố thực tế, không chỉ là tên của hàm. Vì vậy:

<a data-role="none" href="#" onclick="doLogout();"></a> 
<!-- Note the(); ----------------------------^^^ --> 

Cũng lưu ý rằng vì bạn không làm bất cứ điều gì để ngăn chặn hành động mặc định của theo liên kết, trình duyệt sẽ làm theo các href, mà là # sẽ đưa bạn đến đỉnh của trang hiện tại. Bạn có thể ngăn chặn điều đó (nếu bạn muốn) bằng cách thêm một return false;:

<a data-role="none" href="#" onclick="doLogout(); return false;"></a> 

tôi không thể làm theo phần thứ hai của câu hỏi của bạn, nhưng tôi sẽ chỉ lưu ý rằng bạn không cần hoặc muốn javascript: trên thuộc tính onclick trong ví dụ thứ hai của bạn. Bạn chỉ sử dụng giao thức giả đó mà URI được mong đợi (ví dụ: href của một neo). Nội dung của các thuộc tính onXYZ luôn là mã, không phải là URI.

Cuối cùng: Trừ khi bạn đang làm điều gì đó có kiểu dáng, cả hai liên kết đó sẽ khó bấm, những gì bị trống. :-)

+0

cảm ơn các số điện thoại – Dozent

4

Tôi chưa bao giờ phát triển bất kỳ PhoneGap nào, nhưng trong các ứng dụng web, bạn có thể sử dụng mã bên dưới.

thử window.location.replace(url);

sau khi chuyển hướng không có cách nào để đi trang trước.