2011-01-23 110 views
0

(問題改進)創建書籤

你好, 我試圖做一個書籤。 Bookmarklet將被覆蓋並打開頁面的右上角。你可以看到書籤類型[這裏] [1]我想製作覆蓋界面。

這裏是我的javascript代碼爲書籤:

javascript:void((function(){var%20e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('src','http://www.girmiyor.co.cc/bookmarklet.js');document.body.appendChild(e)})()) 

小書籤將調用bookmarklet.js文件。 bookmarklet.js的內容:

document.body.innerHTML += "<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'></script>"; 

document.body.innerHTML += "<div class='result' style='background-color:grey;z-index:1000;position:absolute;right:0;top:0' width='300' height='250'></div>"; 



var site = location.href; 

    $.get("http://www.girmiyor.co.cc/c.php",{ q: site}, function(data){ 
         $('.result').html(data); 
       }); 

GET請求發送我可以通過Firebug看到它。但沒有任何回報。

你能幫我嗎?

+2

*什麼*不起作用?它確實對我有用,但請注意,這種書籤顯然需要JQuery,它不可用於您可能訪問的每個頁面上。 – poke 2011-01-23 16:14:34

+0

它是如何工作的?當我直接添加此代碼的Firefox的書籤,然後單擊返回一個頁面和** [對象XMLHttpRequest] ** – Eray 2011-01-23 16:21:59

+0

@poke,.get方法JQUERY的方法。那麼,我應該爲每個網頁使用哪種方法? – Eray 2011-01-23 16:28:39

回答

2

仔細查看您提到的friendfeed書籤;它所做的就是創建並附加一個新的腳本標籤,該標籤包含具有「真實」功能的js文件。 你提到的文章也是一樣的。基本的(很自顯示)的方法是:

e=document.createElement('script'); 
e.type='text/javascript'; 
e.src='http://domain.tld/file.js'; //optionally pass GET params 
document.getElementsByTagName('head')[0].appendChild(e); //optionally, you could append to the <body> 

,如果你再取在由這個方法,你可以看到覆蓋是如何構造包含的文件一探究竟。我粘貼的重要片段從friendfeed file,其中覆蓋DIV變得定位,尋找那些部分,研究它:

// Create the share dialog in the corner of the window 
var container = div(); 
container.id = "ff__container"; 
container.style.position = "absolute"; 
container.style.top = scrollPos().y + "px"; 
container.style.right = "0"; 
container.style.width = "auto"; 
container.style.zIndex = 100000; 

,所以我會建議你做保存功能構建覆蓋一個單獨的js文件並讓你的小書籤加載該文件。

0

當我添加此代碼直接Firefox的書籤,然後單擊返回一個頁面,[XmlHttpRequest對象]

這是小書籤的通病。要解決該問題,請在書籤代碼的末尾添加一個void(0);。這樣,小書籤將不會返回任何將在瀏覽器中顯示的值。

0

Bookmarklet.js的當前版本已損壞(因爲我正在撰寫此答案),因爲在var data =之後缺少一個報價。

從Appart酒店,我有幾個未經檢驗的理論關於你的問題:

  1. 你更換bodyinnerHTML自己的腳本運行的位置。到腳本結束時,jQuery甚至還沒有加載。您可能必須暫停腳本的執行並等待jQuery加載。試試像把你的$.get()放在一個叫做window.setTimeout()的函數中,最好檢查是否存在$(帶有typeof($) != 'undefined'),並且要麼等待更多,要麼運行你的$.get()
  2. 你加載的jQuery通過HTTPS,所以瀏覽器策略可以防止$.get從HTTP
  3. 設置了jQuery <script>參考的type屬性text/javascript不應該是你的問題得到的東西,但它絕對不會傷害做。