我正在尝试构建一个允许用户保存报价(文本块)的浏览器书签 - 并且通过按下书签 - 将保存报价,以及时间戳和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
*/
}
)();
答案 0 :(得分:1)
1)很好地包装代码以便在书签中工作。
bookmarklet只是使用javascript:
伪协议编码到URL中的JavaScript代码。有几个站点和工具可以将您的代码转换为书签。根本的做法是使代码运行时,你想要做的事情发生。您的代码目前定义了两个函数,但不会调用其中任何一个函数。您想要拨打相关的电话。通常最好将您的bookmarklet代码包装在作用域函数中,这样您就不会添加到页面的全局命名空间(因为可能存在冲突):
(function() {
// Your code here
)();
有些书签制作者可能会选择为你做这件事,但是自己做这件事是微不足道的。
2)显然使用$ post可能无法跨浏览器工作。
这将很好地跨浏览器工作,但在没有加载jQuery的页面中工作,并且将jQuery加载到页面中可能有点过分。我直接使用XMLHttpRequest
。