用于保存研究引文的书签

时间:2013-12-18 07:44:40

标签: javascript jquery google-chrome-extension

我正在尝试构建一个允许用户保存报价(文本块)的浏览器书签 - 并且通过按下书签 - 将保存报价,以及时间戳和URL到他们在网络中的个人资料应用程序。

你可以看到我在下面写的代码,但遇到了一些问题。

  1. 很好地包装代码以便在书签中工作。

  2. 显然使用$ post可能会很重,因为有些页面需要通过书签添加它。

  3. 关于如何进行的任何想法?

    您可以看到我目前在哪里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 个答案:

答案 0 :(得分:1)

  

1)很好地包装代码以便在书签中工作。

bookmarklet只是使用javascript:伪协议编码到URL中的JavaScript代码。有几个站点和工具可以将您的代码转换为书签。根本的做法是使代码运行时,你想要做的事情发生。您的代码目前定义了两个函数,但不会调用其中任何一个函数。您想要拨打相关的电话。通常最好将您的bookmarklet代码包装在作用域函数中,这样您就不会添加到页面的全局命名空间(因为可能存在冲突):

(function() {
    // Your code here
)();

有些书签制作者可能会选择为你做这件事,但是自己做这件事是微不足道的。

  

2)显然使用$ post可能无法跨浏览器工作。

这将很好地跨浏览器工作,但在没有加载jQuery的页面中工作,并且将jQuery加载到页面中可能有点过分。我直接使用XMLHttpRequest