代码在小提琴上工作,但不在网站上[重复]

Posted

技术标签:

【中文标题】代码在小提琴上工作,但不在网站上[重复]【英文标题】:Code is Working on Fiddle but not on Website [duplicate] 【发布时间】:2013-03-12 04:48:50 【问题描述】:

这在 Fiddle 上运行良好,但在我的网站上却不是很好。我似乎无法弄清楚其中的区别。

我已经尝试删除整个 Videobox 包含,但这并没有解决问题。

我也意识到 jQuery 和 Mootools 有点多,但我真的很喜欢 Videobox,我真的很喜欢音频播放器。

就我网站上的工作而言,一切正常,除了我的 javascript 中的第二个函数。

这是小提琴: http://jsfiddle.net/HM8m7/4/

我的网站的 HTML:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Music</title>

<script type="text/javascript" src="videobox/js/mootools.js"></script>
<script type="text/javascript" src="videobox/js/swfobject.js"></script>
<script type="text/javascript" src="videobox/js/videobox.js"></script>
<link rel="stylesheet" href="videobox/css/videobox.css" type="text/css" media="screen" />

<link rel="stylesheet" href="libs/css/styles.css" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="src/jquery.ubaplayer.js"></script>
<script>
       jQuery.noConflict();
       jQuery(function () 
           jQuery("#ubaPlayer").ubaPlayer(
               codecs: [
                 name: "MP3",
                 codec: 'audio/mpeg;'
               ]
           );

       );

       jQuery('a[rel=vidbox]').click(function () 

           if (jQuery("#ubaPlayer").ubaPlayer("playing") === true) 
              jQuery("#ubaPlayer").ubaPlayer("pause");
             
         return false;
       );
</script>
</head>

<body>
<div id="content_wrapper">    
 <div id="table_container">
  <table>
    <tr>
      <th>Title</th>
    </tr>
    <tr>
      <td><div id="ubaPlayer"></div>
        <ul class="controls">
        <a href="http://www.youtube.com/v/2sAnENc6ObI&autoplay=1" rel="vidbox" title="The Rainbox Connection - Live at the Berklee Performance Center"><img src="playbtn.png" class="fakeplay" >The Rainbow Connection (Video)</a>
        <ul class="controls">
        <li><a class="audioButton" href="mp3/closetoyou.mp3">
        Close to You</a></li>
      </td>
    </tr>
 </table>
</div>
</div>
</body>
</html>

音频播放器脚本:

(function($) 
var defaults = 
    audioButtonClass: "audioButton",
    autoPlay: null,
    codecs: [
        name: "OGG",
        codec: 'audio/ogg; codecs="vorbis"'
    , 
        name: "MP3",
        codec: 'audio/mpeg'
    ],
    continuous: false,
    extension: null,
    flashAudioPlayerPath: "libs/swf/player.swf",
    flashExtension: ".mp3",
    flashObjectID: "audioPlayer",
    loadingClass: "loading",
    loop: false,
    playerContainer: "player",
    playingClass: "playing",
    swfobjectPath: "libs/swfobject/swfobject.js",
    volume: 1
,
    currentTrack, isPlaying = false,
    isFlash = false,
    audio, $buttons, $tgt, $el, playTrack, resumeTrack, pauseTrack, methods = 
        play: function(element) 
            $tgt = element;
            currentTrack = _methods.getFileNameWithoutExtension($tgt.attr("href"));
            isPlaying = true;
            $tgt.addClass(defaults.loadingClass);
            $buttons.removeClass(defaults.playingClass);

            if (isFlash) 
                if (audio) 
                    _methods.removeListeners(window);
                
                audio = document.getElementById(defaults.flashObjectID);
                _methods.addListeners(window);
                audio.playFlash(currentTrack + defaults.extension);
             else 
                if (audio) 
                    audio.pause();
                    _methods.removeListeners(audio);
                
                audio = new Audio("");
                _methods.addListeners(audio);
                audio.id = "audio";
                audio.loop = defaults.loop ? "loop" : "";
                audio.volume = defaults.volume;
                audio.src = currentTrack + defaults.extension;
                audio.play();
            
        ,

        pause: function() 
            if (isFlash) 
                audio.pauseFlash();
             else 
                audio.pause();
            

            $tgt.removeClass(defaults.playingClass);
            isPlaying = false;
        ,

        resume: function() 
            if (isFlash) 
                audio.playFlash();
             else 
                audio.play();
            
            $tgt.addClass(defaults.playingClass);
            isPlaying = true;
        ,

        playing: function() 
            return isPlaying;
        
    ,

    _methods = 
        init: function(options) 
            var types;

            //set defaults
            $.extend(defaults, options);
            $el = this;

            //listen for clicks on the controls
            $(".controls").bind("click", function(event) 
                _methods.updateTrackState(event);
                return false;
            );
            $buttons = $("." + defaults.audioButtonClass);

            types = defaults.codecs;
            for (var i = 0, ilen = types.length; i < ilen; i++) 
                var type = types[i];
                if (_methods.canPlay(type)) 
                    defaults.extension = [".", type.name.toLowerCase()].join("");
                    break;
                
            

            if (!defaults.extension || isFlash) 
                isFlash = true;
                defaults.extension = defaults.flashExtension;
            

            if (isFlash) 
                $el.html("<div id='" + defaults.playerContainer + "'/>");
                $.getScript(defaults.swfobjectPath, function() 
                    swfobject.embedSWF(defaults.flashAudioPlayerPath, defaults.playerContainer, "0", "0", "9.0.0", "swf/expressInstall.swf", false, false, 
                        id: defaults.flashObjectID
                    , _methods.swfLoaded);
                );
             else 
                if (defaults.autoPlay) 
                    methods.play(defaults.autoPlay);
                
            
        ,

        updateTrackState: function(evt) 
            $tgt = $(evt.target);
            if (!$tgt.hasClass("audioButton")) 
                return;
            
            if (!audio || (audio && currentTrack !== _methods.getFileNameWithoutExtension($tgt.attr("href")))) 
                methods.play($tgt);
             else if (!isPlaying) 
                methods.resume();
             else 
                methods.pause();
            
        ,

        addListeners: function(elem) 
            $(elem).bind(
                "canplay": _methods.onLoaded,
                "error": _methods.onError,
                "ended": _methods.onEnded
            );
        ,

        removeListeners: function(elem) 
            $(elem).unbind(
                "canplay": _methods.onLoaded,
                "error": _methods.onError,
                "ended": _methods.onEnded
            );
        ,

        onLoaded: function() 
            $buttons.removeClass(defaults.loadingClass);
            $tgt.addClass(defaults.playingClass);

            audio.play();
        ,

        onError: function() 
            $buttons.removeClass(defaults.loadingClass);
            if (isFlash) 
                _methods.removeListeners(window);
             else 
                _methods.removeListeners(audio);
            
        ,

        onEnded: function() 
            isPlaying = false;
            $tgt.removeClass(defaults.playingClass);
            currentTrack = "";
            if (isFlash) 
                _methods.removeListeners(window);
             else 
                _methods.removeListeners(audio);
            

            if (defaults.continuous) 
                var $next = $tgt.next().length ? $tgt.next() : $(defaults.audioButtonClass).eq(0);
                methods.play($next);
            

        ,

        canPlay: function(type) 
            if (!document.createElement("audio").canPlayType) 
                return false;
             else 
                return document.createElement("audio").canPlayType(type.codec).match(/maybe|probably/i) ? true : false;
            
        ,

        swfLoaded: function() 
            if (defaults.autoPlay) 
                setTimeout(function() 
                    methods.play(defaults.autoPlay);
                , 500);
            
        ,

        getFileNameWithoutExtension: function(fileName) 
            //this function take a full file name and returns an extensionless file name
            //ex. entering foo.mp3 returns foo
            //ex. entering foo returns foo (no change)
            var fileNamePieces = fileName.split('.');
            fileNamePieces.pop();
            return fileNamePieces.join(".");
        
    ;

$.fn.ubaPlayer = function(method) 
    if (methods[method]) 
        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
     else if (typeof method === "object" || !method) 
        return _methods.init.apply(this, arguments);
     else 
        $.error("Method " + method + " does not exist on jquery.ubaPlayer");
    
;)(jQuery);

视频框脚本:

var Videobox = 

init: function (options) 
    // init default options
    this.options = Object.extend(
        resizeDuration: 400,    // Duration of height and width resizing (ms)
        initialWidth: 250,      // Initial width of the box (px)
        initialHeight: 250,     // Initial height of the box (px)
        defaultWidth: 625,      // Default width of the box (px)
        defaultHeight: 350, // Default height of the box (px)
        animateCaption: true,   // Enable/Disable caption animation
        flvplayer: 'swf/flvplayer.swf'
    , options || );

    this.anchors = [];
    $A($$('a')).each(function(el)
        if(el.rel && el.href && el.rel.test('^vidbox', 'i')) 
            el.addEvent('click', function (e) 
      e = new Event(e);
      e.stop();
      this.click(el);
            .bind(this));
            this.anchors.push(el);
        
, this);

    this.overlay = new Element('div').setProperty('id', 'lbOverlay').injectInside(document.body);
    this.center = new Element('div').setProperty('id', 'lbCenter').setStyles(width: this.options.initialWidth+'px', height: this.options.initialHeight+'px', marginLeft: '-'+(this.options.initialWidth/2)+'px', display: 'none').injectInside(document.body);

    this.bottomContainer = new Element('div').setProperty('id', 'lbBottomContainer').setStyle('display', 'none').injectInside(document.body);
    this.bottom = new Element('div').setProperty('id', 'lbBottom').injectInside(this.bottomContainer);
    new Element('a').setProperties(id: 'lbCloseLink', href: '#').injectInside(this.bottom).onclick = this.overlay.onclick = this.close.bind(this);
    this.caption = new Element('div').setProperty('id', 'lbCaption').injectInside(this.bottom);
    this.number = new Element('div').setProperty('id', 'lbNumber').injectInside(this.bottom);
    new Element('div').setStyle('clear', 'both').injectInside(this.bottom);

    var nextEffect = this.nextEffect.bind(this);
    this.fx = 
        overlay: this.overlay.effect('opacity', duration: 500).hide(),
        center: this.center.effects(duration: 500, transition: Fx.Transitions.sineInOut, onComplete: nextEffect),
        bottom: this.bottom.effect('margin-top', duration: 400)
    ;

,

click: function(link) 

        return this.open (link.href, link.title, link.rel);

,
open: function(sLinkHref, sLinkTitle, sLinkRel) 
    this.href = sLinkHref;
    this.title = sLinkTitle;
    this.rel = sLinkRel;
    this.position();
    this.setup();
    this.video(this.href);
    this.top = Window.getScrollTop() + (Window.getHeight() / 15);
    this.center.setStyles(top: this.top+'px', display: '');
    this.fx.overlay.start(0.8);
    this.step = 1;
    this.center.setStyle('background','#fff url(loading.gif) no-repeat center');
    this.caption.innerHTML = this.title;
    this.fx.center.start('height': [this.options.contentsHeight]);
,

setup: function()
    var aDim = this.rel.match(/[0-9]+/g);
    this.options.contentsWidth = (aDim && (aDim[0] > 0)) ? aDim[0] : this.options.defaultWidth;
    this.options.contentsHeight = (aDim && (aDim[1] > 0)) ? aDim[1] : this.options.defaultHeight;

,

position: function()
this.overlay.setStyles('top': window.getScrollTop()+'px', 'height': window.getHeight()+'px');
,

video: function(sLinkHref)
    if (sLinkHref.match(/youtube\.com\/watch/i)) 
  this.flash = true;
        var hRef = sLinkHref;
        var videoId = hRef.split('=');
        this.videoID = videoId[1];
        this.so = new SWFObject("http://www.youtube.com/v/"+this.videoID, "flvvideo", this.options.contentsWidth, this.options.contentsHeight, "0");
        this.so.addParam("wmode", "transparent");
    
    else if (sLinkHref.match(/metacafe\.com\/watch/i)) 
  this.flash = true;
        var hRef = sLinkHref;
        var videoId = hRef.split('/');
        this.videoID = videoId[4];
        this.so = new SWFObject("http://www.metacafe.com/fplayer/"+this.videoID+"/.swf", "flvvideo", this.options.contentsWidth, this.options.contentsHeight, "0");
        this.so.addParam("wmode", "transparent");
    
    else if (sLinkHref.match(/google\.com\/videoplay/i)) 
  this.flash = true;
        var hRef = sLinkHref;
        var videoId = hRef.split('=');
        this.videoID = videoId[1];
        this.so = new SWFObject("http://video.google.com/googleplayer.swf?docId="+this.videoID+"&hl=en", "flvvideo", this.options.contentsWidth, this.options.contentsHeight, "0");
        this.so.addParam("wmode", "transparent");
    
    else if (sLinkHref.match(/ifilm\.com\/video/i)) 
      this.flash = true;
        var hRef = sLinkHref;
        var videoId = hRef.split('video/');
        this.videoID = videoId[1];
        this.so = new SWFObject("http://www.ifilm.com/efp", "flvvideo", this.options.contentsWidth, this.options.contentsHeight, "0", "#000");
        this.so.addVariable("flvbaseclip", this.videoID+"&");
        this.so.addParam("wmode", "transparent");
    
    else if (sLinkHref.match(/\.mov/i)) 
      this.flash = false;
        if (navigator.plugins && navigator.plugins.length) 
      this.other ='<object id="qtboxMovie" type="video/quicktime" codebase="http://www.apple.com/qtactivex/qtplugin.cab" data="'+sLinkHref+'"  ><param name="src" value="'+sLinkHref+'" /><param name="scale" value="aspect" /><param name="controller" value="true" /><param name="autoplay" value="true" /><param name="bgcolor" value="#000000" /><param name="enablejavascript" value="true" /></object>';
   else 
    this.other = '<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"   id="qtboxMovie"><param name="src" value="'+sLinkHref+'" /><param name="scale" value="aspect" /><param name="controller" value="true" /><param name="autoplay" value="true" /><param name="bgcolor" value="#000000" /><param name="enablejavascript" value="true" /></object>';
  
    
    else if (sLinkHref.match(/\.wmv/i) || sLinkHref.match(/\.asx/i)) 
    this.flash = false;
     this.other = '<object NAME="Player" WIDTH="'+this.options.contentsWidth+'" HEIGHT="'+this.options.contentsHeight+'" align="left" hspace="0" type="application/x-oleobject" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"><param NAME="URL" VALUE="'+sLinkHref+'"><param><param NAME="AUTOSTART" VALUE="false"></param><param name="showControls" value="true"></param><embed WIDTH="'+this.options.contentsWidth+'" HEIGHT="'+this.options.contentsHeight+'" align="left" hspace="0" SRC="'+sLinkHref+'" TYPE="application/x-oleobject" AUTOSTART="false"></embed></object>'
    
    else if (sLinkHref.match(/\.flv/i)) 
     this.flash = true;
     this.so = new SWFObject(this.options.flvplayer+"?file="+sLinkHref, "flvvideo", this.options.contentsWidth, this.options.contentsHeight, "0", "#000");
    
    else 
      this.flash = true;
        this.videoID = sLinkHref;
        this.so = new SWFObject(this.videoID, "flvvideo", this.options.contentsWidth, this.options.contentsHeight, "0");
    
,

nextEffect: function()
    switch (this.step++)
    case 1:
        this.fx.center.start('width': [this.options.contentsWidth], 'marginLeft': [this.options.contentsWidth/-2]);
        break;
        this.step++;
    case 2:
        this.center.setStyle('background','#fff');
        this.flash ? this.so.write(this.center) : this.center.setHTML(this.other) ;
        this.bottomContainer.setStyles(top: (this.top + this.center.clientHeight)+'px', height: '0px', marginLeft: this.center.style.marginLeft, width: this.options.contentsWidth+'px',display: '');
        if (this.options.animateCaption)
            this.fx.bottom.set(-this.bottom.offsetHeight);
            this.bottomContainer.style.height = '';
            this.fx.bottom.start(0);
            break;
        
        this.bottomContainer.style.height = '';
        this.step++;
    
,

close: function()
    this.fx.overlay.start(0);
    this.center.style.display = this.bottomContainer.style.display = 'none';
    this.center.innerHTML = '';
    return false;
;window.addEvent('domready', Videobox.init.bind(Videobox));

【问题讨论】:

控制台中的任何错误 试试这个,用这个函数写javascript。 $(document).ready(function() //你的 jquery 脚本 ); @ArunPJohny:完全没有错误。 @RajInevitable:用“jQuery”代替“$”可以吗? @kurzweilguy 是的,你可以 【参考方案1】:

您的网站 JS 代码需要等待 DOM 准备好,然后 jQuery 才能找到 #ubaPlayera[rel=vidbox] 元素(这是因为您的 script 在 HTML 之前声明,如果您的脚本可以逃脱它是在 html 之后定义的,尽管这不是一个好主意,因为您确实应该将 JavaScript 放在外部 .js 文件中)。

所以,用.ready() 包装它,以便您的脚本在 DOM 准备好后运行:

   jQuery(document).ready(function () 
       jQuery("#ubaPlayer").ubaPlayer(
           codecs: [
             name: "MP3",
             codec: 'audio/mpeg;'
           ]
       );
       jQuery('a[rel=vidbox]').click(function () 
           if (jQuery("#ubaPlayer").ubaPlayer("playing") === true) 
               jQuery("#ubaPlayer").ubaPlayer("pause");
           
           return false;
       );

   );

小提琴有on DOM ready,所以它可以工作。

【讨论】:

已修复!完美的!谢谢,伙计们! 还有 - doc.jsfiddle.net/faq.html

以上是关于代码在小提琴上工作,但不在网站上[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Regexp_like 在调试器网站上工作,但不在 Oracle SQL Developer 上工作

无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]

prepareForSegue 在模拟器上工作但不在设备上

php函数file_exits,copy,shell_exec不在一台机器上工作,但相同的代码在不同的机器上工作

Vue.js 过滤器在本地工作,但不在服务器上

为啥我的网站图标不在服务器上工作,但在本地工作?