2013-03-09 1 views
0

내 사이트에 PHP에 대한 액세스 권한이 없으므로 아래에서 수행하려는 작업이이 코드를 사용하여 해결하려고합니다. 아래 열거 된 두 링크가 포함 된 링크를 검색합니다./watch와 함께 youtube에서 하나? 그 안에는 YouTube의/v가있는 URL이 있습니다. 또한 임베디드 요소를 검색합니다. 문제는 스크립트를 실행하여 오류로 인해 다른 모든 코드가 손상되는 것입니다.정의되지 않은 스크립트 문제에서 메서드 대체를 호출 할 수 없습니다.

Uncaught TypeError: Cannot call method 'replace' of undefined

엉덩이에 통증이 있습니까! 그래서 나는 그것을 FF로 가져 갔고 변수 WT는 명확하게 정의되어 있지 않다고 말한다. if 문의 범위 밖에서 사용 했으므로 그렇지 않을 수도 있습니다. 링크가 존재하는지 확인하는 방법을 모르겠습니다. Embed가 존재하는 경우뿐만 아니라 코드도 실행됩니다. 이것들은 내 사용자 게시물에 있으며 내 fancybox에서 자동으로 작동하도록 변경됩니다.

Here is a live example

그것의 빠른 연결 CSS 내 페이지에서 복사 된 마크 업 그래서 버그 모양을 신경 쓰지 않는다.

$(function() { 
    //if link contains /watch? 
    var t = $('.entry-content div div a[href*="youtube.com/watch?"]').attr('href'); 
    if(typeof t !== "undefined") { 
     //do nothing don't run the script below 
    } else { 
     var d = $('.entry-content div div a[href*="youtube.com/watch?"]'); 
     var newsrc = t.replace('watch?',''); 
     var asrc = newsrc.replace('=','/'); 
     var g = asrc.replace('http://www.','http://img.'); 
     var s = g.replace('v','vi'); 
     d.attr('class','ez_video'); 
     d.attr('href', asrc).html('<img src="'+ s +'/0.jpg"/>'); 
    } 
    //if link contains /v 
    var wt = $('.entry-content div div a[href*="youtube.com/v"]').attr('href'); 

    if(typeof wt !== "undefined") { 
     //do nothing don't run script below 
    } else { 
     var wd = $('.entry-content div div a[href*="youtube.com/v"]'); 
     var o = wt.replace('http://www.','http://img.'); 
     var v = o.replace('v','vi'); 
     wd.attr('class','ez_video'); 
     wd.attr('href', v).html('<img src="'+ v +'/0.jpg"/>'); 
    } 

    //if embeded file 
    var src = $('.entry-content').find('embed').attr('src'); 
    if (typeof src !== "undefined") { 
     //do nothing again unless true run script below 
    } else { 
     var qload = src.replace('http://youtube.com/v/',''); 
     var y = src.replace('http://','http://img.'); 
     var imgsrc = y.replace('v','vi'); 
     $('embed').before('<a class="ez_video" id="' 
      + qload +'" href="'+ src +'"><img src="' 
      + imgsrc +'/0.jpg" tile="" alt=""/></a>'); 
     $('embed').remove(); 

    } 
    //Now make all work with the fancybox 

    $('.ez_video').fancybox({ 
     'autoScale'  : false, 
     'transitionIn' : 'elastic', 
     'transitionOut' : 'elastic', 
     'width'   : 854, 
     'height'  : 480, 
     'type'   : 'swf', 
     'swf'   : { 
      'wmode'    : 'transparent', 
      'allowfullscreen' : 'true' 
     } 
    }); 
}); 
+1

코드는 __are__ 변수가 정의되지 않은 경우에만 실행됩니다. 왜? – Mathletics

+0

정말 기다려? 나는 종류의 var를 배웠습니다! == "undefined"영역은 정의되지 않았습니까? – EasyBB

+1

'! =='은 "같지 않음"을 의미합니다. '==='는 "정확히 같음"을 의미합니다 – Mathletics

답변

0

당신은 정의의 문자열로 비교하는 당신은 그것을 실제 예약 된 단어를 비교해야한다 동안 :

if(typeof wt !== undefined) 

을 또한 수행 할 수 있습니다

if(wt !== "undefined") 

BTW, 당신이 무엇을 그렇게하지 않으면 정의되지 않은 것입니다. 아무것도하지 않습니다. 그렇지 않으면 뭔가를하십시오. 이것이 정말로 당신이 원하는 것입니까?

+1

typeof는 실제로 문자열을 반환하므로 문자열에 대한 테스트가 절대적으로 정확합니다 ... 먼저 콘솔에서 응답을 테스트하십시오. –

+0

글쎄, 전에 이런 유형을 사용하지 않았다. 그래서 기본적으로 당신이 말하는 것은 스크립트가 정의되지 않았고 else 문이 실제로 무의미한 경우입니다. 따라서 else 문을 지우고 코드를 실제 if에 넣어야합니다. – EasyBB

+1

EasyBB - 예, @DavidMcMullin -이 바이올린을보십시오. http://jsfiddle.net/mHmNQ/1/ – Tomer