ajax 로 딩 페이지 실행 js

7169 단어 Ajax
이벤트 배경
공용 페이지 는 여러 페이지 에서 호출 되 어야 합 니 다. 그 중에서 일부 js 는 공용 페이지 에 쓰 여 있 습 니 다. ajax 를 통 해 이 페이지 를 불 러 온 후 js 를 실행 할 수 없습니다.
해결 방향
1. iframe 을 추가 하 는 방법 으로 js 를 집행 하고 저 등 코드 결벽 자 에 게 무시 당 합 니 다.
2. document. write 출력 코드 를 사용 합 니 다. 저 등 간결 주의 자 들 이 원 하지 않 습 니 다.
3. 가장 간단 한 방법 은 js 를 호출 이 필요 한 부모 페이지 에 두 는 것 입 니 다. 이러한 공용 페이지 를 원 하 시 면 모든 곳 에서 한 번 씩 호출 하고 코드 가 불필요 합 니 다.
4. eval 은 해결 방법 이지 만 효과 가 없다.
5. 복잡 한 해결 방법: 로 딩 페이지 의 모든 js 와 일치 합 니 다. 이 js 들 에 게 똑 같은 < script > 탭 을 만 들 고 js 내용 을 삽입 하면 실 행 됩 니 다.그러나 사용 중 Firefox 가 가능 하지만 IE 는 따 르 지 않 습 니 다.(스승 님, 따 르 세 요 ~)
해결 방안 (1)
상기 여러 가지 방식 을 종합 하여 불리 한 요 소 를 제거 하고 비교적 실 용적 인 방법 을 정리 하면 이러한 공용 페이지 에서 ajax 로 딩 을 실행 하 는 js 의 수 요 를 만족 시 킬 수 있 습 니 다. ajax 로 딩 한 공용 함수 에 코드 를 추가 하면 됩 니 다.주요 코드 는 다음 과 같 습 니 다.
function executeScript(html) {alert(13);   var regDetectJs = /(.||\r)*?<\/script>/ig;     var jsContained = html.match(regDetectJs);     
  if(jsContained) {     var regGetJS = /((.||\r)*)?<\/script>/im;    
     var jsNums = jsContained.length;     for (var i=0; i  }
[js] 
view plain
copy
 
// 첫 번 째 단계: 불 러 온 페이지 에 js 가 있 는 지 여부  
var regDetectJs = /(.||\r)*?<\/script>/ig;  
var jsContained = ajaxLoadedData.match(regDetectJs);  
  
// 두 번 째 단계: js 가 포함 되 어 있 으 면 js 를 한 단락 씩 꺼 내 서 불 러 옵 니 다.  
if(jsContained) {  
    // 세그먼트 추출 js 정규  
    var regGetJS = /((.||\r)*)?<\/script>/im;  
  
    // 순차 세그먼트 실행 js  
    var jsNums = jsContained.length;  
    for (var i=0; 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 을 사용 해 야 합 니 다.
이로써 비교적 완벽 한 해결 이 라 고 할 수 있다.
[전환: http://www.impng.com/web-dev/execscript-loaded-by-ajax.html]
 
 
해결 방안 (2)
ajax 로 딩 페이지 의 js 총 결 을 실행 합 니 다.
2010-12-01 16:40:15|  분류:  JavaScript  |  태그: ajax   집행 하 다.    js   |상점  구독 하 다.
 
'ajax 로 딩 페이지 에 포 함 된 자바 script 을 실행 합 니 다.' 라 는 글 을 보고 최근 에 이 문제 에 얽 매 여 죽 고 싶 은 어린이 신발 들 에 게...
이벤트 배경
공용 페이지 는 여러 페이지 에서 호출 되 어야 합 니 다. 그 중에서 일부 js 는 공용 페이지 에 쓰 여 있 습 니 다. ajax 를 통 해 이 페이지 를 불 러 온 후 js 를 실행 할 수 없습니다.
해결 방향
1. iframe 을 추가 하 는 방법 으로 js 를 집행 하고 저 등 코드 결벽 자 에 게 무시 당 합 니 다.
2. document. write 출력 코드 를 사용 합 니 다. 저 등 간결 주의 자 들 이 원 하지 않 습 니 다.
3. 가장 간단 한 방법 은 js 를 호출 이 필요 한 부모 페이지 에 두 는 것 입 니 다. 이러한 공용 페이지 를 원 하 시 면 모든 곳 에서 한 번 씩 호출 하고 코드 가 불필요 합 니 다.
4. eval 은 해결 방법 이지 만 효과 가 없다.
5. 복잡 한 해결 방법: 로 딩 페이지 에 있 는 모든 js 와 일치 합 니 다. 이 js 들 을 위해 같은 < script > 탭 을 만 들 고 js 내용 을 삽입 하면 실 행 됩 니 다. 그러나 사용 중 Firefox 가 가능 하지만 IE 는 실행 되 지 않 습 니 다. (스승 님, 그만 하 세 요 ~)
해결 방안
상기 여러 가지 방식 을 종합 하여 불리 한 요 소 를 제거 하고 비교적 실 용적 인 방법 을 정리 하면 이러한 공용 페이지 에서 ajax 로 딩 을 실행 하 는 js 의 수 요 를 만족 시 킬 수 있 습 니 다. ajax 로 딩 한 공용 함수 에 코드 를 추가 하면 됩 니 다. 주요 코드 는 다음 과 같 습 니 다.
//    :            js
var regDetectJs = /<script(.|
)*?>(.|
|\r
)*?<\/script>/ig; var jsContained = ajaxLoadedData.match(regDetectJs);
//    :    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_r(jsSection[2]);
   }
  }
 }
}
 

설명: window. execScript 는 IE 로 인식 하고 다른 브 라 우 저 는 eval 을 사용 해 야 합 니 다.
이로써 비교적 완벽 한 해결 이 라 고 할 수 있다.
function executeScript(html) { var reg = /]*>([^\x00]+)$/i; //전체 HTML 세 션 을 < \ / script > 으로 나 눕 니 다. var htmlBlock = html.split("<\/script>"); for ( var i in htmlBlock) { var blocks; / 정규 표현 식 과 일치 하 는 내용 배열 입 니 다. blocks [1] 는 진정한 스 크 립 트 내용 입 니 다. 앞의 reg 정의 로 괄호 로 캡 처 그룹 을 만 들 었 기 때 문 입 니 다. if (blocks = htmlBlock[i].match(reg)) { //존재 할 수 있 는 주석 표 시 를 삭제 합 니 다. 주석 끝 -- > 처 리 를 무시 할 수 있 습 니 다. eval 처럼 정상적으로 작 동 할 수 있 습 니 다. var code = blocks[1].replace(/

좋은 웹페이지 즐겨찾기