12
A
回答
12
最可靠的方法是實際進行功能測試。瀏覽器嗅探是脆弱和不可靠的。
我在CFT http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED中有這樣的測試的例子。請注意,應在加載document.body
之後運行測試。
0
如果讓這樣的代碼存在位置你可以檢查:
<html>
<script type="text/javascript">
test = function() {
if(!!document.getElementById("test").style.position) {
alert('true');
}
else{
alert('false');
}
}
</script>
<body>
<p id="test" onclick="test();" style="position:fixed;">Hi</p>
</body>
</html>
由於位置在所有主要的瀏覽器中存在,這將始終返回true。我想有沒有辦法來檢查可能的位置值,所以你必須檢查哪個瀏覽器和用戶正在查看你的頁面的版本,正如Paolo Bergantino所說。
0
position:fixed
顯然適用於除身體在移動Safari瀏覽器(4.3.2)所有的塊級元素,所以CFT答案(http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED)應該有這個在它:
var isSupported = (container.scrollTop === 500 && elementTop === 100);
2
我發現移動Safari(尤其是OSX上的iOS模擬器iOS 4.2)拒絕滾動任何地方,除非你等待幾個毫秒。因此,誤報。
我寫了一個快速的jQuery插件來解決它:
(function($) {
$.support.fixedPosition = function (callback) {
setTimeout(
function() {
var container = document.body;
if (document.createElement && container && container.appendChild && container.removeChild) {
var el = document.createElement('div');
if (!el.getBoundingClientRect) return null;
el.innerHTML = 'x';
el.style.cssText = 'position:fixed;top:100px;';
container.appendChild(el);
var originalHeight = container.style.height,
originalScrollTop = container.scrollTop;
container.style.height = '3000px';
container.scrollTop = 500;
var elementTop = el.getBoundingClientRect().top;
container.style.height = originalHeight;
var isSupported = !!(elementTop === 100);
container.removeChild(el);
container.scrollTop = originalScrollTop;
callback(isSupported);
}
else {
callback(null);
}
},
20
);
}
})(jQuery);
0
的功能測試Position fixed support,如上所述,返回上的Opera Mini假陽性(它不支持位置:固定)。
0
我已經創建了另一個檢查,如果position:fixed
真的在瀏覽器中受支持。它創建固定的div並嘗試滾動並檢查div的位置是否改變。
function isPositionFixedSupported(){
var el = jQuery("<div id='fixed_test' style='position:fixed;top:1px;width:1px;height:1px;'></div>");
el.appendTo("body");
var prevScrollTop = jQuery(document).scrollTop();
var expectedResult = 1+prevScrollTop;
var scrollChanged = false;
//simulate scrolling
if (prevScrollTop === 0) {
window.scrollTo(0, 1);
expectedResult = 2;
scrollChanged = true;
}
//check position of div
suppoorted = (el.offset().top === expectedResult);
if (scrollChanged) {
window.scrollTo(0, prevScrollTop);
}
el.remove();
return suppoorted;
}
此功能已在Firefox 22,Chrome 28,IE 7-10,Android Browser 2.3中測試。
1
function fixedcheck() {
var fixedDiv = $('<div>').css('position', 'fixed').appendTo('body');
var pos1 = fixedDiv.offset().top;
$(window).scrollTop($(window).scrollTop() + 1);
var pos2 = fixedDiv.offset().top;
fixedDiv.remove();
return (pos1 != pos2)
}
/* Usage */
$(document).ready(function() {
if (!fixedcheck()) alert('Your browser does not support fixed position!')
});
相關問題
- 1. 檢測瀏覽器是否支持位置:固定
- 2. 跨瀏覽器對位置的支持:固定
- 3. 固定定位浮動菜單以支持移動瀏覽器
- 4. 爲jQuery Mobile支持檢測瀏覽器
- 5. 檢查瀏覽器.m3u8支持php
- 6. 檢查瀏覽器是否支持SVG
- 7. 檢查瀏覽器是否支持MutationObserver
- 8. 移動瀏覽器的固定位置
- 9. 谷歌瀏覽器的位置:固定
- 10. webkit瀏覽器上的固定位置
- 11. Chrome瀏覽器CSS位置:固定
- 12. 跨瀏覽器支持jQuery
- 13. 如何讓瀏覽器保持固定位置滾動?
- 14. 如何使用JS/jQuery檢查瀏覽器是否支持touchstart?
- 15. 瀏覽器支持
- 16. 檢查瀏覽器是否支持特定的MIME類型?
- 17. 瀏覽器支持WebDriver還是WebDriver支持瀏覽器
- 18. 檢測瀏覽器與Modernizr支持css3
- 19. 如何檢測瀏覽器支持requestFullscreen
- 20. 檢測瀏覽器對RFC5987的支持
- 21. 檢測SSL瀏覽器支持
- 22. 檢測瀏覽器對SVGFragmentIdentifier的支持
- 23. CSS檢測瀏覽器支持javascript
- 24. 檢測瀏覽器是否支持jQueryMobile
- 25. 檢測瀏覽器是否支持vbscript?
- 26. 位置固定支持父母絕對
- 27. 如何檢測瀏覽器是否支持webkit瀏覽器?
- 28. 檢測短信:瀏覽器支持瀏覽器
- 29. iPad瀏覽器是否支持jQuery?
- 30. jQuery的跨瀏覽器支持問題
如果你告訴我們爲什麼你需要這個,我們可能會給你一個解決方法,無論你在做什麼。 – 2009-06-10 05:53:21
我想檢測瀏覽器是否支持固定的,如果是的話很好,否則我會用一些醜陋的黑客來定位元素。 – 2009-06-10 05:56:44