Ajax 동적 으로 html 페이지 를 불 러 온 후 js 빠 른 해결 방법 을 실행 할 수 없습니다.

이벤트 배경
공용 페이지 는 여러 페이지 에서 호출 되 어야 합 니 다.그 중에서 일부 js 는 공용 페이지 에 쓰 여 있 습 니 다.ajax 를 통 해 이 페이지 를 불 러 온 후 js 를 실행 할 수 없습니다.
해결 방향
1.iframe 을 추가 하 는 방법 으로 js 를 집행 하고 저 등 코드 결벽 자 에 게 무시 당 합 니 다.
2.document.write 출력 코드 를 사용 합 니 다.저 등 간결 주의 자 들 이 원 하지 않 습 니 다.
3.가장 간단 한 방법 은 js 를 호출 이 필요 한 부모 페이지 에 두 는 것 입 니 다.이러한 공용 페이지 를 원 하 시 면 모든 곳 에서 한 번 씩 호출 하고 코드 가 불필요 합 니 다.
4.eval 은 해결 방법 이지 만 효과 가 없다.
5.복잡 한 해결 방법:로 딩 페이지 의 모든 js 와 일치 합 니 다.이 js 들 에 게 똑 같은탭 을 만 들 고 js 내용 을 삽입 하면 실 행 됩 니 다.그러나 사용 중 Firefox 가 가능 하지만 IE 는 따 르 지 않 습 니 다.(스승 님,따 르 세 요~)
해결 방안
상기 여러 가지 방식 을 종합 하여 불리 한 요 소 를 제거 하고 비교적 실 용적 인 방법 을 정리 하면 이러한 공용 페이지 에서 ajax 로 딩 을 실행 하 는 js 의 수 요 를 만족 시 킬 수 있 습 니 다.ajax 로 딩 한 공용 함수 에 코드 를 추가 하면 됩 니 다.주요 코드 는 다음 과 같 습 니 다.

// 第一步:匹配加载的页面中是否含有js
var regDetectJs = /<script(.|
)*?>(.|
|\r
)*?<\/script>/ig; var jsContained = ajaxLoadedData.match(regDetectJs); //ajaxLoadedData为ajax获取到的数据 // 第二步:如果包含js,则一段一段的取出js再加载执行 if(jsContained) { // 分段取出js正则 var regGetJS = /<script(.|
)*?>((.|
|\r
)*)?<\/script>/im; // 按顺序分段执行js var jsNums = jsContained.length; for (var i=0; i<jsNums; i++) { var jsSection = jsContained[i].match(regGetJS); if(jsSection[2]) { if(window.execScript) { // 给IE的特殊待遇 window.execScript(jsSection[2]); } else { // 给其他大部分浏览器用的 window.eval(jsSection[2]); } } } }
설명:window.execScript 는 IE 로 인식 하고 다른 브 라 우 저 는 eval 을 사용 해 야 합 니 다.
총결산
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 Ajax 동적 으로 html 페이지 를 불 러 온 후에 그 중의 js 빠 른 해결 방법 을 실행 할 수 없습니다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기