Я пытался получить нулевой буфер обмена и jQuery UI Dialog хорошо сочетаются друг с другом, и это оказывается довольно сложным.
Zero Clipboard позволяет копировать в буфер обмена из Javascript, помещая прозрачный Flash-ролик поверх кнопки, чтобы пользователь нажимал на Flash, когда он пытался нажать кнопку. Это прекрасно работает и работает в разных браузерах, как вы можете видеть на демонстрационной странице.
Однако при попытке использовать это в диалоговом окне jQuery UI что-то пошло не так.
Во-первых, я обнаружил, что элемент flash должен быть помещен внутри элемента диалога, иначе Chrome и IE отказываются реагировать на события кликов. Это означает, что я не могу использовать метод удобства glue
, но это нормально.
Однако теперь IE по какой-то причине не принимает метод setText
для элемента Flash.
Пример того, что я сделал, приведен здесь. Мой код начинается примерно с 300-й строки, и наиболее релевантными являются следующие строки:
$("#showme").dialog({autoOpen: false, width: 550, height: 200});
$("#showme").bind("dialogopen", function() {
if($("#clipflash").length == 0) {
var btn = $("#d_clip_button");
$("<div id='clipflash' style='position:absolute; background: #f00; z-index: 9999' />")
.css(btn.position())
.width(btn.width())
.height(btn.height())
.html(clip.getHTML(btn.width(), btn.height()))
.appendTo("#showme");
}
});
Я покрасил div в красный цвет, чтобы его было легче заметить, и установил для его z-индекса значение 9999, просто на всякий случай. Затем я устанавливаю положение и размер, чтобы покрыть «кнопку», и добавляю HTML для элемента Flash с помощью clip.getHTML()
.
Я работаю над этим уже несколько часов, поэтому любая помощь будет принята с благодарностью.
Чуть не забыл: моя проблема в том, что IE7 говорит "Объект не поддерживает это свойство или метод" внутри кода нулевого буфера обмена.
ОБНОВИТЬ
комментарий powtac указывает на то, что выглядит действительно многообещающе:
Я забыл собственное золотое правило: чтобы Flash ExternalInterface работал в IE 7, вы должны вставить HTML-код EMBED/OBJECT в элемент DIV ПОСЛЕ, после чего он будет присоединен к DOM. Глупый ИИ.
Однако переключение строк .html(clip.getHTML(btn.width(), btn.height()))
и .appendTo("#showme")
не помогло. Даже выполнение setTimeout
для добавления Flash HTML позже не помогло. Я чувствую, что я действительно близок, хотя...