是否有一種方法可以覆蓋window.location.reload的默認行爲 - 使其成爲無操作,用於調試目的?以編程方式禁用window.location.reload?
回答
問題是,由於某種原因,location.reload
實際上不是Firefox和Chrome中的可寫屬性。這是我想出的一些瘋狂的方式在這些瀏覽器中覆蓋它(和其他)。它使用非標準的.__defineGetter__()
方法,部分是爲了繞開window.location = "/home.html"
的魔法干擾。
var _location = location;
__defineGetter__('location', function() {
var s = new String(_location);
for(i in _location) (function(i) {
s.__defineGetter__(i, function() {
return typeof _location[i] == 'function' ? function(){} : _location[i];
});
s.__defineSetter__(i, function(){});
})(i);
return s;
});
__defineSetter__('location', function(){});
將所得模擬對象應防止任何函數調用(包括.reload
)或分配(設定.href
)從實際發生作用。或者,您可以將您的測試限制爲可以寫入.reload
的IE,Safari和Opera。
在Opera 11.60中無效:「'未處理的錯誤:__defineGetter__:無效修改不可配置的屬性「。 – XP1 2012-01-21 19:22:43
在Chrome上靜默失敗 – 2013-02-19 23:11:41
現在由於Chrome上的錯誤而失敗。 – MasterScrat 2018-02-15 08:49:29
您必須在自調用函數中調用此代碼,除非它不起作用。
(function(location){
...
})(window.location);
這也在Chrome中靜默失敗 – 2016-12-12 17:51:47
- 1. 以編程方式啓用/禁用Log4jLogger?
- 2. 如何以編程方式禁用SparkUI?
- 3. Android以編程方式禁用onScroll()
- 4. UIWebView以編程方式禁用縮放
- 5. 以編程方式禁用Spring Security
- 6. 以編程方式禁用FirebaseMessagingService
- 7. 以編程方式禁用類別
- 8. 以編程方式禁用UIButton
- 9. 以編程方式禁用ipv4/ipv6
- 10. 以編程方式禁用Firefox擴展
- 11. 如何以編程方式禁用cookie
- 12. 以編程方式禁用AF?
- 13. 以編程方式禁用Alertview
- 14. 以編程方式禁用UIButton
- 15. 以編程方式禁用按鈕
- 16. Spring Boot - 以編程方式禁用AutoConfiguration
- 17. 以編程方式禁用ScollViewer滾動
- 18. 以編程方式禁用麥克風
- 19. 以編程方式禁用Outlook Addin
- 20. 以編程方式禁用gif動畫
- 21. 以編程方式禁止Windows警報
- 22. 以編程方式啓用我禁用的應用程序
- 23. 以編程方式啓用/禁用相機應用程序
- 24. 以編程方式啓用/禁用沉浸模式
- 25. 如何以編程方式禁用com +應用程序?
- 26. c#WinForms - 以編程方式禁用Application.EnableVisualStyles()方法?
- 27. 以編程方式禁用縱向方向鎖定
- 28. Android M:如何以編程方式禁用打盹模式
- 29. 以編程方式禁用Visual Studio代碼格式
- 30. 如何以編程方式禁用Apple Watch的睡眠模式
我的第一個猜測是'window.location.reload = function(){}'但這不起作用,至少在Firefox上。 – 2011-03-05 15:12:20
應該是可能的 - 參見[Javascript - 覆蓋或阻止執行](http://stackoverflow.com/questions/850090/javascript-override-or-prevent-execution) – 2011-03-05 15:12:36
'window.location.reload = function(){} '適用於Firefox 4 – 2011-03-06 07:58:11