2013-08-20 5 views
1

У меня есть кнопка копирования текста, в которой я использую ZeroClipboard, чтобы скопировать определенный текст на странице. Он работает в Chrome и IE, но не копирует текст в Firefox, а событие complete никогда не запускается.ZeroClipboard, поврежденный FireFox

Мой JavaScript для настройки кнопки выглядит примерно так:

ZeroClipboard.setDefaults({ 
    moviePath: '/js/zeroclipboard/ZeroClipboard.swf', 
    allowScriptAccess: 'always', 
    forceHandCursor: true 
}); 

function enableCopyButton(container) { 
    var button = container.find('.text-copy'), 
     source = container.find('.text'), 
     clip = new ZeroClipboard(button); 

    clip.setText(source.val()); 

    clip.on('load', function (client) { 
    console.log('ZeroClipboard loaded.'); 

    client.on('complete', function (client, args) { 
     console.log('Text copied: ' + args.text); 
    }); 
    }); 

    clip.on('noFlash', function() { 
    console.error('No Flash installed!'); 
    }); 
    clip.on('wrongFlash', function() { 
    console.error('Wrong Flash installed!'); 
    }); 
} 

консоль заканчивает показ "ZeroClipboard loaded." и больше ничего. Ошибок не возникает, и я подтвердил, что ZeroClipboard.swf загружается и помещается на страницу. Также запускаются события mousedown и mouseup. На странице, на которой выполняется эта операция, используется действительный сертификат SSL, и все ресурсы на странице загружаются через HTTPS.

Демо-страница библиотеки на GitHub отлично работает в FireFox, поэтому я подозреваю, что это то, что я делаю.

+0

только возможно, неправильная часть я могу увидеть 'source.val()'. Является ли 'source' в области видимости в Firefox, и имеет ли эта переменная функцию' val'? Если этот код не является проблемой, я не могу решить проблему без проверки [example] (http://jsfiddle.net/) для проверки. –

+0

Я обновил свой вопрос, чтобы показать, что лучше. Это в области, проблема не в том, что текст установлен. – coreyschram

ответ

0

Моя DEV среда:

  • .NET 4.5
  • ASP.NET MVC4 с двигателем Razor
  • JQuery

Вот что я сделал, чтобы получить копию в буфер обмена, чтобы работать через 5 веб-камеры:

  • FF 23
  • IE 10
  • Chrome 29
  • Safari 5.1.7
  • Opera 16

Мой сценарий: текст Я хочу, чтобы скопировать в буфер обмена генерируется положить в Разд вместе с HTML breaks (br). Для копирования мне нужно было удалить эти html-перерывы и заменить их на/r/n. Копия осуществляется нажатием кнопки.

Не это, возможно, не лучший способ закодировать это, но это сработало для меня.

захватить последний ZeroClipboard из github

В моем файле .cshtml я определяю кнопку и ДИВ и включают в себя файл ZeroClipboard.min.js.

<!-- language-all: lang-html --> 
<button id="btCopyToClipboard" name="btCopyToClipboard" type="button">Copy To Clipboard</button> 
<div id="Basket" ></div> 

Javascript часть:

<!-- language: lang-js --> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     //"style" the buttons 
     $("#btCopyToClipboard").button(); 

     //ZeroClipboard code 
     var clip = new ZeroClipboard(document.getElementById('btCopyToClipboard'), { 
      moviePath: "/Scripts/ZeroClipboard.swf", // URL to movie 
      trustedOrigins: null, //null Page origins that the SWF should trust (single string or array of strings) 
      hoverClass: "", // The class used to hover over the object 
      activeClass: "", // The class used to set object active 
      allowScriptAccess: "always",    //sameDomain SWF outbound scripting policy 
      useNoCache: true,      // Include a nocache query parameter on requests for the SWF 
      forceHandCursor: true      //false Forcibly set the hand cursor ("pointer") for all glued elements 
     }); 
     //if just using var clip = new ZeroClipboard(); then need to use .glue(..) 
     //clip.glue(document.getElementById('btCopyToClipboard')); 
     clip.on('load', function (client, args) { 
      DebugLog("ZeroClipboard.swf is loaded and user's flash version is: " + args.flashVersion); 
     }); 

     //The complete event is fired when the text is successfully copied to the clipboard. 
     clip.on('complete', function (client, args) { 
      //alert("clip.onComplete(..) -- Copied text to clipboard args.text: " + args.text); 
     }); 

     clip.on('mouseover', function (client) { 
      // alert("mouse over"); 
     }); 

     clip.on('mouseout', function (client) { 
      //alert("mouse out"); 
     }); 

     clip.on('mousedown', function (client) { 
      //alert("mouse down"); 
     }); 

     clip.on('mouseup', function (client) { 
      //alert("mouse up"); 
     }); 

     clip.on('dataRequested', function (client, args) { 
      //get text from basket 
      var txt = $("#Basket").html(); 
      //to make Notepad honour line breaks, we have to do some magic 
      var windowsText = txt.replace(/\n/g, '\r\n'); 
      //replace html break with line breaks 
      windowsText = windowsText.replace(/<br\s*\/?>/g, "\r\n"); 
      client.setText(windowsText); 
     }); 

     clip.on('noflash', function (client, args) { 
      var msg = "You don't support flash, therefore the Copy To Clipboard will not work."; 
      DebugLog(msg); 
      alert(msg); 
     }); 
     clip.on('wrongflash', function (client, args) { 
      var msg = 'Your flash is too old ' + args.flashVersion + '. The Copy To Clipboard supports version 10 and up.'; 
      DebugLog(msg); 
      alert(msg); 
     }); 

     function DebugLog(message) { 
      if (console && console.log) { 
       console.log(message); 
      } 
     } 
    });//eof $(document).ready 
</script> 
1

Я не уверен, если это поможет, но в последнее время я работал на использовании zeroclipboard более чем через месяц. Иногда он работает, но иногда он терпит неудачу из-за некоторых очень крошечных вещей (может быть, потому, что я очень новичок в javascript и html-материале) ... и я очень хорошо понимаю расстройство ...

В вашем случае у вас есть когда-либо пробовал это событие раньше? Вместо этого используйте clip.setText (источник.Val()) один, переместить его в событие «dataRequested», как это:

clip.on('dataRequested', function(client, args) { 
    client.setText(source.val()); 
}); 

Затем после нажатия на кнопку, увидеть, если событие завершения увольняют.

Кстати, мне интересно, если ваш «noflash» или «wrongflash» был запущен нормально? В моем случае, если пользователи не имеют флэш установлен, это событие еще не уволили ... не уверен, что случилось с ним ...

В любом случае, удачи :)

+0

Я, вероятно, исправил это в [PR # 273] (https://github.com/zeroclipboard/zeroclipboard/pull/273). Попробуйте последнюю версию бета-версии: [v1.3.0-beta.1] (https://github.com/zeroclipboard/zeroclipboard/releases/tag/v1.3.0-beta.1) –

0

Последняя версия zeroclipboard использования event.stopImmediatePropagation, который не существует в Firefox до версии 28.0, он терпит неудачу с ошибкой:

event.stopImmediatePropagation is not a function 

Вы можете увидеть сравнение браузера здесь:

http://compatibility.shwups-cms.ch/de/home?&property=TrackEvent.prototype.stopImmediatePropagation

Я использую этот polifil добавить недостающую функциональность:

https://github.com/mattcg/stopImmediatePropagation

Смежные вопросы