Для моей культуры программирования я экспериментирую с аудио-тегами html и аудиоисточниками, а также с буфером обмена ОС. Уже 3 дня я пытаюсь решить проблему следующим образом.
Положение
У меня есть html-страница на сервере с js, в которой есть куча кода.
JS делает много вещей, среди прочего генерирует два ввода, вставляя туда, где мне нужен соответствующий HTML:
текстовый ввод:
<input type="text" id="titleToCopy" value="" />
and a button:
<input type="button" value="Copy" onclick="copyTitleOnClipboard()"/>
Into the js code there are also these two functions
function execThings() //This execute some operations and also calls other functions
{
console.log(arguments.callee.name);
var dest = document.getElementById(myplayerID); // Gets my player by its ID
var osrc = getOriginalPlayer().src;
dest.src = osrc;
updateTitleToCopy();
copyTitleOnClipboard();
stopOriginalPlayer();
}
function copyTitleOnClipboard() // This function select and copies to the Operative System clipboard the content of the related text input
{
console.log(arguments.callee.name);
var titleInput = document.getElementById("titleToCopy");
titleInput.focus(); // The function works good with or without this line
titleInput.select();
var r = document.execCommand("copy");
r = r === true ? "has been" : "not";
console.log("Title " + r + " copied to clipboard");
}
Для отладки я добавил в обе функции строку
console.log(arguments.callee.name);
Таким образом, на консоли Chrome отображается имя функции, поэтому я могу проверить, запускается ли она.
Поведение
- Если я нажму кнопку, соответствующая функция onclick copyTitleOnClipboard () выполнится и скопирует значение ввода в буфер обмена ОС.
- Если я напишу от руки название функции copyTitleOnClipboard () в консоль Google Chrome, она тоже будет работать.
Для меня это означает, что функция copyTitleOnClipboard () сама по себе работает правильно. Фактически на консоли в обоих случаях я получаю отладочную информацию благодаря строке:
console.log("Title " + r + " copied to clipboard");
, который, как и ожидалось, возвращает результат
Заголовок скопирован в буфер обмена
И если я вставлю в другое место (например, в блокнот) содержимое буфера обмена, результатом будет значение ввода текстового поля, как и ожидалось.
проблема
Проблема заключается в том, что когда выполнение связано с другой функцией execThings () , которая вызывает функцию copyTitleOnClipboard () , она больше не работает: copyTitleOnClipboard () функция выполняется на самом деле на консоли отображается ее имя, как и ожидалось, но я также получаю сообщение об ошибке:
Заголовок не скопирован в буфер обмена
и если я вставлю содержимое буфера обмена в блокнот, оно не будет содержать значение текстового поля, которое должно быть скопировано, или будет пустым
Вопросы
- Почему вызов функции copyTitleOnClipboard () из другой функции не работает, как если бы я вызывал ее, нажимая кнопку или руками консоли Chrome?
- Как мне решить проблему?
Заранее спасибо.