Я являюсь частью команды, которая работает над Java-приложением, которое, помимо прочего, помогает людям организовывать и аннотировать информацию из Интернета. В настоящее время мы используем плагин Firefox, который присоединяет атрибут контейнера, который содержит источник документа, что позволяет автоматически перетаскивать перетаскиваемый текст. Это не всегда приводит к получению исходного документа, поскольку только текст передается, когда выделение не пересекает HTML-теги. например
<p container="http://www.somesite.com/blah.html">this is text from a site</p><p container="http://www.somesite.com/blah.html">this is more text from a site</p>
Таким образом, если выбран только , то текст , html-теги никогда не пересекаются, и браузер считает, что информация тега окружения и его атрибут контейнера будут нежелательными; поэтому он игнорирует это.
Поэтому я решил создать расширение Chrome, которое использовало бы некоторые изящные функции HTML5, чтобы любое перетаскивание со страницы браузера, которая выпадала из приложения Java, включало исходный документ. К вашему сведению, расширения Chrome основаны на Javascript.
Похоже, что правильно сделать, это зарегистрировать событие dragstart в документе, которое позволит мне получить доступ к содержимому перетаскивания, а также добавить метатег, который включает местоположение исходного документа.
В соответствии с текущим стандартом, http://dev.w3.org/html5/spec/Overview.html#the-datatransfer-interface, это должно быть возможно при использовании интерфейса dataTransfer .
Итак, я регистрирую событие dragstart , которое должно дать мне информацию о событии dataTransfer. Вы можете скопировать и вставить этот код в консоль Javascript в Chrome, чтобы убедиться в этом:
window.addEventListener("dragstart", function(event) {
console.log(event.dataTransfer.types);
console.log(event.dataTransfer.getData("Text")); });
Затем выберите что-нибудь и перетащите. В Chrome вывод: "null" затем "undefined" . Если вы вставите тот же код в консоль Javascript в Firebug, а затем перетащите какой-нибудь выбранный вами текст, то результат будет именно таким, как вы ожидаете:
DOMStringList { 0="text/_moz_htmlcontext", 1="text/_moz_htmlinfo", 2="text/html", more...}
whatever text was selected
Любопытно, что один может использовать setData для event.dataTransfer, чтобы изменить то, что отброшено. Эта часть, кажется, работает как ожидалось. Вставьте его вместо этого в консоль Chrome Javascript, затем выберите что-нибудь и перетащите в текстовый редактор или в окно поиска:
window.addEventListener("dragstart", function(event) {
event.dataTransfer.setData("Text","I made this here for you!");
});
Похоже, он сломан. :( У кого-нибудь есть обходной путь или какое-то понимание этой проблемы? Я действительно хочу, чтобы это работало в Chrome, потому что мне нравится его архитектура расширения.
Спасибо!