Я пытаюсь создать букмарклет браузера, который позволяет пользователю сохранять цитату (блок текста) - и при нажатии букмарклета - сохранит цитату, а также временную метку и URL-адрес их профиля внутри веб-приложения.
Вы можете увидеть код, который я написал ниже, но столкнувшись с несколькими проблемами.
Хорошо обменивать код, чтобы работать в букмарклет.
Очевидно, использование $ post может быть тяжелым, если некоторые страницы потребуют его добавления букмарклетом.
Любые идеи о том, как действовать?
Вы можете видеть, где я сейчас нахожусь здесь http://jsfiddle.net/Rh7zx/1/
(function() {
function getSelectionHtml() {
var html = "";
if (typeof window.getSelection != "undefined") {
var sel = window.getSelection();
if (sel.rangeCount) {
var container = document.createElement("div");
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
container.appendChild(sel.getRangeAt(i).cloneContents());
}
html = container.innerHTML;
}
} else if (typeof document.selection != "undefined") {
if (document.selection.type == "Text") {
html = document.selection.createRange().htmlText;
}
}
return html;
}
function saveToBiblio() {
var url = window.location;
var dateSaved = new Date();
var selectedText = getSelectionHtml();
console.log(url + dateSaved + selectedText);
/*
do the $post here
*/
}
)();
1) Хорошо нарисуйте код, чтобы работать в букмаркете.
Букмарклет - это только код JavaScript, закодированный в URL-адрес, используя псевдопротокол javascript:
Есть несколько сайтов и инструментов, которые возьмут ваш код и превратят его в букмарклет. Главное, чтобы сделать так, чтобы при запуске кода произошла вещь, которую вы хотите сделать. В настоящее время ваш код определяет две функции, но не вызывает их. Вы хотите вызвать соответствующий. Также лучше всего обернуть ваш код букмарклета в функции определения области видимости, чтобы вы не добавляли в глобальное пространство имен страницы (из-за возможности конфликтов):
(function() {
// Your code here
)();
Некоторые из создателей букмарклов могут иметь возможность сделать это за вас, но делать это самостоятельно тривиально.
2) Очевидно, что использование $ post может не работать с перекрестным браузером.
Это будет работать с кросс-браузером, но не будет работать на страницах, на которых не загружен jQuery, и загрузка jQuery на страницу, вероятно, будет излишней. Я бы использовал XMLHttpRequest
напрямую.