Tôi muốn biết cách thay đổi url mà không cần chuyển hướng như trên trang web này http://dekho.com.pk/ads-in-lahore khi chúng tôi nhấp vào các tab thay đổi url nhưng tải lại trang hoàn toàn. Có những câu hỏi khác trên stackoverflow chỉ ra rằng nó là không thể nhưng tôi muốn biết làm thế nào các trang web đã đề cập ở trên đã thực hiện nó. Cảm ơnthay đổi url mà không chuyển hướng bằng cách sử dụng javascript
Trả lời
sử dụng pushState
:
window.history.pushState("", "", '/newpage');
liên kết tham khảo để biết thêm chi tiết http://diveintohtml5.info/history.html –
https://developer.mozilla.org/en-US/docs/Web/API/History_API –
Nếu bạn muốn biết chính xác những gì họ sử dụng, đó là Backbone.js (xem dòng 4574
và 4981
). Đó là tất cả trộn lẫn trong đó với nguồn jQuery, nhưng đây là những dòng có liên quan của trang annotated Backbone.Router
source tài liệu:
Các support checks:
this._wantsPushState = !!this.options.pushState;
this._hasPushState = !!(this.options.pushState && window.history && window.history.pushState);
Các route
chức năng:
route: function(route, name, callback) {
Backbone.history || (Backbone.history = new History);
if (!_.isRegExp(route)) route = this._routeToRegExp(route);
if (!callback) callback = this[name];
Backbone.history.route(route, _.bind(function(fragment) {
var args = this._extractParameters(route, fragment);
callback && callback.apply(this, args);
this.trigger.apply(this, ['route:' + name].concat(args));
Backbone.history.trigger('route', this, name, args);
}, this));
return this;
},
Lựa chọn giữa hash and push state s:
// Depending on whether we're using pushState or hashes, and whether
// 'onhashchange' is supported, determine how we check the URL state.
if (this._hasPushState) {
Backbone.$(window).bind('popstate', this.checkUrl);
} else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE) {
Backbone.$(window).bind('hashchange', this.checkUrl);
} else if (this._wantsHashChange) {
this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
}
Thông tin thêm về những gì họ đang lên đến:
// If we've started off with a route from a `pushState`-enabled browser,
// but we're currently in a browser that doesn't support it...
if (this._wantsHashChange && this._wantsPushState && !this._hasPushState && !atRoot) {
this.fragment = this.getFragment(null, true);
this.location.replace(this.root + this.location.search + '#' + this.fragment);
// Return immediately as browser will do redirect to new url
return true;
// Or if we've started out with a hash-based route, but we're currently
// in a browser where it could be `pushState`-based instead...
} else if (this._wantsPushState && this._hasPushState && atRoot && loc.hash) {
this.fragment = this.getHash().replace(routeStripper, '');
this.history.replaceState({}, document.title, this.root + this.fragment);
}
if (!this.options.silent) return this.loadUrl();
Và coup 'd grace:
// If pushState is available, we use it to set the fragment as a real URL.
if (this._hasPushState) {
this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);
}
Bạn nên đọc Backbone.js chú thích liên kết tôi cung cấp ở đầu trang. Rất thông tin.
Cảm ơn câu trả lời của bạn.nó rất thông tin . tôi không biết xương sống nhưng vì vậy tôi đang đi cho pushstate vì nó đáp ứng tất cả các nhu cầu của tôi. – kb858
Backbone.js được xây dựng xung quanh bộ định tuyến, vì đó là "ứng dụng một trang". Mặc dù bạn có thể chưa đủ kinh nghiệm để nhìn thấy nó trong câu trả lời của tôi ở trên, đó là * chính xác * những gì Backbone.js đang làm, cũng như sự xuống cấp duyên dáng (đối với những người không có trình duyệt hỗ trợ nó). Xem liên kết của tôi trong bình luận theo câu hỏi của bạn; Tôi muốn sử dụng một thư viện như https://github.com/balupton/History.js/, chứ không phải cuộn của riêng bạn. Trừ khi bạn biết bạn đang làm gì. –
Tôi đang sử dụng History.js như tôi là newb :) – kb858
- 1. .htaccess: Chuyển hướng mà không thay đổi url
- 2. Thay đổi URL và chuyển hướng sử dụng jQuery
- 3. .htaccess chuyển hướng mà không thay đổi thanh địa chỉ
- 4. Chuyển đến neo mà không thay đổi url
- 5. thay đổi URL mà không thay đổi tên tài nguyên
- 6. Phát hiện thay đổi về giá trị băm của URL bằng cách sử dụng JavaScript
- 7. tốc chuyển hướng không thay đổi req.url
- 8. Thay đổi URL chuyển hướng facebook khi đăng nhập
- 9. Chuyển hướng bằng cách sử dụng jQuery
- 10. Chuyển hướng URL không www đến www bằng cách sử dụng .htaccess
- 11. Thay đổi trường hợp bằng cách sử dụng Javascript regex
- 12. URL Codeigniter Chuyển hướng mà không cần thêm index.php
- 13. Chuyển hướng dựa trên URL - JavaScript
- 14. Chuyển hướng người dùng đến máy chủ gần nhất dựa trên vị trí của họ mà không thay đổi url
- 15. Cách nhận URL và nội dung được chuyển hướng bằng cách sử dụng HttpURLConnection
- 16. Thay đổi hướng chuyển đổi jQuery Mobile
- 17. Jersey - Chuyển hướng bằng cách sử dụng không được đặt, nguyên nhân chuyển hướng vòng lặp
- 18. Github biên tập ý chính mà không thay đổi URL
- 19. Tự động tải xuống bằng cách sử dụng WebBrowser mà không cần url
- 20. Điều hướng URL trong iframe bằng Javascript
- 21. Chuyển hướng Javascript bằng Google Analytics
- 22. phát hiện chuyển hướng bằng javascript - cách thực hiện?
- 23. Tôi làm cách nào để có được url chuyển hướng bằng javascript?
- 24. Định tuyến Backbone.js mà không thay đổi url
- 25. kích hoạt tuyến đường backbone.js mà không thay đổi url
- 26. Nhận url trang bằng cách sử dụng javascript
- 27. Cách thay đổi url trang
- 28. javascript cách chuyển đổi tên đường dẫn của thuộc tính window.location và chuyển hướng
- 29. Cách tự động thay đổi mẫu hình ảnh trong SVG bằng cách sử dụng Javascript
- 30. URL thay đổi Backbone.js mà không cần tải lại trang
Trên liên kết bạn đã đề cập, cùng một dịch vụ web được gọi nhưng có các thông số khác nhau. –
['history.pushState()'] (https://developer.mozilla.org/en-US/docs/DOM/Manipulating_the_browser_history). Ngoài ra còn có jQuery trong đó, nhưng kỹ thuật cụ thể đó đã có. đẩy trạng thái trở lại với các trình duyệt cũ hơn. –
Bạn cũng có thể sử dụng window.location.hash và sửa đổi http://url.com/page#hash. –