전체 브라우저 요약(IE7/IE8/IE9/SAfari/Chrome/Firefox)
1. 브라우저의 버전을 가져오는 것은 매우 중요합니다. 이 작업을 하기 전에 저는 다 썼습니다. 그 과정에서 호환되지 않는 상황이 발생하면 반드시 브라우저의 판단을 해야 합니다.
제가 봉인을 하고 테스트를 거쳤습니다. [IE의 호환 모드는 고려하지 않습니다] 좋아하는 친구는 직접 가져가셔도 됩니다.
var BrowserType =
{
IE7: "MSIE 7.0",
IE8: "MSIE 8.0",
IE9: "MSIE 9.0",
IE10: "MSIE 10.0",
Chrome: "Chrome",
Firefox: "Firefox",
Safari: "Safari"
};
/// <summary>
/// Get Browser version
/// </summary>
function getBrowserVersion()
{
if (navigator.userAgent.indexOf("MSIE 7.0") > 0)
{
return BrowserType.IE7;
}
if (navigator.userAgent.indexOf("MSIE 8.0") > 0)
{
return BrowserType.IE8;
}
if (navigator.userAgent.indexOf("MSIE 9.0") > 0)
{
return BrowserType.IE9;
}
if (navigator.userAgent.indexOf("MSIE 10.0") > 0)
{
return BrowserType.IE10;
}
if (navigator.userAgent.indexOf("Firefox") > 0)
{
return BrowserType.Firefox;
}
if (navigator.userAgent.indexOf("Chrome") > 0)
{
return BrowserType.Chrome;
}
if (navigator.userAgent.indexOf("Safari") > 0)
{
return BrowserType.Safari;
}
}
2. IFrame에 관한 질문, 이것은 크로스 브라우저에서 꼭 만나게 될 것입니다. 이것도 두 개의function을 봉하여 공유합니다.
/// <summary>
/// Get iFrame DOM Function [IE、Firefox]
/// </summary>
function getIFrameDOM(id)
{
var iframeObj = null;
if (document.getElementById(id) != null)
{
iframeObj = document.getElementById(id).contentDocument || document.frames[id];
}
return iframeObj
}
/// <summary>
/// Get iFrame Window Function [IE、Firefox]
/// </summary>
function getIFrameWindow(id)
{
var iframeWindow = null;
if (document.getElementById(id) != null)
{
iframeWindow = document.getElementById(id).contentWindow || document.frames[id].window;
}
return iframeWindow;
}
진정으로 사용하는 것은 두 번째 방법이다. iFrame의 window를 취하고, 그 다음에 window의 방법을 호출하는 것이다.
3. IFrame 불러오기 완료에 대한 이벤트 판단 - 이전에 IE의 onreadystatechange를 사용했습니다
if (getBrowserVersion() == BrowserType.IE8 || getBrowserVersion() == BrowserType.IE7)
{
$('#framePrintMap')[0].onreadystatechange = function ()
{
if (this.readyState == 'loaded' || this.readyState == 'complete')
{
var json = jQuery.parseJSON($('#hidDatas').val());
var options = jQuery.parseJSON($('#hidOptions').val());
getIFrameWindow('framePrintMap').initPrintMap(json, options);
}
}
}
else
{
$('#framePrintMap')[0].onload = function ()
{
if (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')
{
var json = jQuery.parseJSON($('#hidDatas').val());
var options = jQuery.parseJSON($('#hidOptions').val());
getIFrameWindow('framePrintMap').initPrintMap(json, options);
}
}
}
$('#framePrintMap').attr('src', 'ThematicPrintMap.aspx');
IE7과 IE8이라면 onload 이벤트를 사용할 수 있지만,ready State 대상이 없고, iFrame에서 직접 호출하는 방법을 불러오지 않아 오류가 발생했습니다.IE9이면 이 두 가지 다 돼요. onreadystatechange는 IE만 지원하고 Safari/Chrome/safari는 onload의 가지만 갈 수 있어요. 그런데 왜 하나를 더 넣어요!readyState?Firefox에 ready State 대상이 없기 때문에 이렇게 판단할 수밖에 없다.
4. 크로스 브라우저에서의 Table 자동 스트레칭의 차이점: 나의 다른 글을 참고하십시오 Table 자동 스트레칭은 Chrome과IE의 차이점
5. 각 브라우저의 소수 처리에 관하여: 나의 다른 글을 참고하시오. 각 브라우저의 소수 처리 정돈 상황의 대비
6. 마우스의 위치를 포획하는 브라우저의 차이에 관하여: 나의 다른 글 JavaScript에서 마우스 이벤트의 위치가 각 브라우저의 공통점과 차이점을 참고하십시오
7. Chrome/safari position:absolute에 대한 처리는 다른 브라우저와 다소 다르다. IE와 Firefox는 부모 요소의 내부에 있고 Chrome/safari는 부모 요소를 뛰어나간다.
8. IE7은 다른 브라우저의 text-align:center 처리와 다르다. IE7: 내부의 텍스트와div는 모두 가운데이고 다른 브라우저: 텍스트만 가운데이며 div는 가운데가 아니다. td의 내용을 div 내부에 패키지하면 해결할 수 있다. td내의 div의 css는text-align:left이고 div의 css는text-align:center이며 내부의 텍스트는 가운데에 놓을 수 있다.또 다른 year의 타이틀을 표시하는div도 마찬가지로 설정하면 됩니다.
9. IE7에 대한 IE=EmulateIE7과 IE=7 및 진정한 IE7의 차이점;[브라우저 모드]와 [문서 모드] 간의 차이점을 참조하십시오.
10. 크롬/사파리에서submit을 누르면 백엔드에 데이터를 제출합니다. 데이터 양이 512k를 넘으면 자동으로 차단됩니다. input의 type을hidden으로 바꾸면 됩니다.
11. 부모 용기 설정overflow:auto;하위 요소 설정 속성position:relative;i7에서 이 하위 요소는 스크롤 바를 따라 굴러가지 않습니다:overflow: auto 속성을 설정한 용기에position:relative를 추가하면 됩니다.
12. Safari 다음 시간 Date.Parse 시간이 정확하지 않은 문제: [때로는 정확하고 때로는 정확하지 않다. 테스트에서 2034년이 지난 후에 정확하지 않다는 것을 발견했다.] 이 문제는 브라우저 커널이 제대로 되지 않아서 어쩔 수 없다. 호환하려면 방법을 강구해야 한다.
먼저 날짜를 사용자 정의 표준 형식으로 변경합니다.
Date.prototype.format = function (format)
{
var o =
{
"M+": this.getMonth() + 1, // month
"d+": this.getDate(), // day
"h+": this.getHours(), // hour
"m+": this.getMinutes(), // minute
"s+": this.getSeconds(), // second
"q+": Math.floor((this.getMonth() + 3) / 3), // quarter
"S": this.getMilliseconds() // millisecond
}
if (/(y+)/.test(format))
{
format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o)
{
if (new RegExp("(" + k + ")").test(format))
{
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
}
그리고 이 격식을 해석하는 시간이 필요합니다.
/// <summary>
/// Time format:2011-10-01 00:00:00 *[SQL:120] || 2011/10/01[SQL:111]
/// </summary>
this.dateFromString = function (str)
{
var arr = str.split(/[^0-9]/);
var curTime = null;
if (arr.length == 3)
{
curTime = new Date(arr[0], arr[1] - 1, arr[2]);
}
else if (arr.length >= 6)
{
curTime = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]);
}
return curTime;
}
이것은 일반적으로 시간을 원소의 확장 속성에 연결한 다음에 사용할 때, div.data ('time') 를 해석하는 데 쓰인다.
13. Firefox에서는 중첩된 function이 지원되지 않습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【JS】YouTube의 iframe 삽입 동영상을 JS로 컨트롤YouTube의 퍼가기 코드로 동영상을 웹 사이트에 넣을 수 있습니다만, 재생이나 정지를 JS로 컨트롤 하고 싶은 경우가 있어, 조사해 보았습니다. 그건 그렇고, YouTube는 ie8 지원을 더 이상하지 않는 것 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.