Просмотр полной версии : JavaScript ClipBoard monitor
Как сделать чтобы страница всегда мониторила буфер обмена и если происходили бы какие то изменения, то скрипт проверял первые 5 начальный символов и если они были бы равны SF10Q, то текст из буфер обмена вставлялся в поле (Лучше конечно если такое возможно сразу перейти на страницу или же хотя бы вставить в поле ввода и нажать кнопку перехода). Помогите пожалуйста, оч. надо... Наведите хотя бы на мысль, а то я вообще новичек и я постораюсь чего нибудь откопать, а так понятия не приложу как это сделать. Нашел функции clipboardData.getData('Text') и clipboardData.setData('Text'), но как сделать чтобы мониторилось, я ума не приложу :( :help: :(
B@rmaley.e><e
05.12.2010, 16:39
В JS нет средств для работы с буфером обмена (что-то вроде есть в IE, но не в нормальных браузерах). И, ЕМНИП, даже в HTML5 ничего для работы с буфером обмена не предлагали.
monolithed
05.12.2010, 16:56
Для IE работа с БО с помощью JS возможна и по сей день, однако во всех остальных браузерах (за исключением Firefox, где нужно в настройках установить соответствующее разрешение, как? (http://www.sukebe.ru/blog-posts/13/)) такая возможность отсутствует. Единственный кроссбраузерный способ использовать flash. Как написано здесь (http://habrahabr.ru/blogs/javascript/91003/)
Как раз и нужно под IE 6, только вот не знаю каким методом, не подскажете?
monolithed
05.12.2010, 17:09
аким методом
Есть два объекта: dataTransfer, clipboardData
//копировать данные:
window.clipboardData.setData("Text" , 'text');
//получить данные
window.clipboardData.getData('Text');
//удалить данные:
window.clearData.getData("Text");
это то я понял :P а как поставить на мониторинг? как отследить изменения переменной?
monolithed
05.12.2010, 22:21
как поставить на мониторинг? как отследить изменения переменной?
какой переменной?
как сделать так, чтобы всегда отслеживалось значение window.clearData.getData("Text"); на изменение? :(
offiks,
а таймером нельзя разве ?
monolithed
06.12.2010, 16:00
как сделать так, чтобы всегда отслеживалось значение window.clearData.getData("Text"); на изменение?
обработчики событий использовать, если я правильно вас понял
Doomer, вроде как можно, но я даже не знаю команд никаких... капаюсь, пытаюсь как могу, очень нужно... но я так понимаю если использовать таймер, то страница может сильно лаговать если я поставлю таймер проверять повозможности чаще, вплоть до миллисекунд.
monolithed, не покажете пожалуйста пример кода?
Единственный кроссбраузерный способ использовать flash. Как написано здесь
насколько я знаю, даже для флеша это возможно как реакция на действие пользователя, на клик или может еще что-нибудь. И странную ссылку ты привел...
offiks, иногда бывает полезно рассказать, что ты хочешь сделать, вместо того, чтобы биться головой о придуманное тобой решение ;)
monolithed
07.12.2010, 10:59
<script type="text/javascript">
window.onload = function(){
document.getElementsByName('copy')[1].onclick = function(){
var text = document.getElementsByName('copy')[0].value;
if(window.clipboardData) window.clipboardData.setData("Text", text); //IE
else if(window.netscape) { //Netscape
try {
if(netscape.security.PrivilegeManager.enablePrivil ege)
netscape.security.PrivilegeManager.enablePrivilege ('UniversalXPConnect');
//netscape.security.PrivilegeManager.enablePrivilege ('UniversalBrowserRead');
//netscape.security.PrivilegeManager.enablePrivilege ("UniversalBrowserWrite")
}
catch(event) {
alert('Настройка безопасности браузера не позволяет обращаться к буферу обмена!\n'+event);
return;
}
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard );
if(!clip) return;
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransfera ble);
if(!trans) return;
trans.addDataFlavor('text/unicode');
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsS tring),
copy = text;
str.data = copy;
trans.setTransferData("text/unicode", str, copy.length*2);
if(!clip) return false;
clip.setData(trans, null, Components.interfaces.nsIClipboard.kGlobalClipboar d);
}
alert("В буфер обмена сохранено:\n" + text);
return false;
};
};
</script>
<input type="text" value="text" name="copy" />
<input type="submit" value="copy" name="copy" />
насколько я знаю, даже для флеша это возможно как реакция на действие пользователя, на клик или может еще что-нибудь. И странную ссылку ты привел...
offiks, иногда бывает полезно рассказать, что ты хочешь сделать, вместо того, чтобы биться головой о придуманное тобой решение ;)
Хочу сделать страницу, которая будет следить за буфером обмена где бы я нибыл, хоть на другой странице или в другой программе (надо для работы). Вот допустим сижу я в SAP (программа) и скопировал номер документа, а сайт заметил изменение в буфере обмена номер документа и сразу загрузил его, вот чего я хочу сделать, но ломаю голову и не знаю как.
Onload функция ведь действует только при загрузке страницы, а значит не подходит :(
monolithed, я имел в виду без включения всяких настроек безопасности
offiks, лучше писать десктопное приложение, потому что там должны быть средства мониторинга буфера обмена и не надо обходить меры безопасности. Может дальше еще какие-нибудь проблемы вылезут. Но я так понимаю, что это не вариант для тебя. Поэтому можно пробовать писать web-приложение, и да, без таймеров тут не обойдешься. А чтобы не лагало, надо будет найти компромис между быстротой реакции и влиянием на производительность
offiks,
вы сап транзакции прямо в ИЕ открываете ?
тогда тупо по таймеру спокойно можно сделать
сап транзакции
что такое SAP-транзакции?
По работе пришлось сталкиватся, когда интегрировал СРМ в сап портал. Это актив икс, который открывается прямо в браузере, на офиц сайте сапа должны быть скрины. В сапе помоему любые действия называются транзакциями
http://eniesrwda01.state.pa.us/icontent/PYTE_UWL/wi/html/index_image023.gif
monolithed
08.12.2010, 15:34
А вот оно что... так бы стразу, тогда этого для работы с буфером будет достаточно:
<script type="text/javascript">
window.onload = function(){
document.getElementsByName('copy')[1].onclick = function(){
var text = document.getElementsByName('copy')[0].value;
if(window.clipboardData){
window.clipboardData.setData("Text", text); //IE
alert("В буфер обмена сохранено:\n" + window.clipboardData.getData("Text"));
}
else {
alert("Ваш браузер: " + navigator.appCodeName + '\nСбавьте обороты до IE5+');
}
return false;
};
};
</script>
<input type="text" value="text" name="copy" />
<input type="submit" value="copy" name="copy" />
<input type="text" id="zzz">
<script type="text/javascript">
function test(){
var buf = window.clipboardData.getData('Text');
if(buf.substring(0,5)=="SF10Q" && window.old_buf!=buf){
document.getElementById('zzz').value = buf;
window.old_buf=buf;
}
setTimeout("test()",500);
}
test();
</script>
Если я понял ТСу надо такое
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot