2013-04-08 59 views
3

嗨我想創建一個書籤 - 讓它打開一個網頁找到一個鏈接到該網頁上的下載,然後關閉該網頁。除非有更好的方法去做,否則我打開頁面,調用ready(我認爲這是非workint的部分),然後搜索下載鏈接。導入jQuery的代碼取自:http://coding.smashingmagazine.com/2010/05/23/make-your-own-bookmarklets-with-jquery/jQuery準備書籤

javascript:(function() { 
var v = "1.3.2"; 

if (window.jQuery === undefined || window.jQuery.fn.jquery < v) { 
    var done = false; 
    var script = document.createElement("script"); 
    script.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + v + "/jquery.min.js"; 
    script.onload = script.onreadystatechange = function(){ 
     if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) { 
      done = true; 
      initMyBookmarklet(); 
     } 
    }; 
    document.getElementsByTagName("head")[0].appendChild(script); 
} 
else { 
    initMyBookmarklet(); 
} 

function initMyBookmarklet() { 
    var ytm = window.open('http://example.com'); 
    jQuery(document).ready(function() { 
     var div = ytm.document.getElementById("dl_link"); 
     var links = ytm.document.getElementsByTagName('a'); 
     var dl = links[1]; 
     window.open(dl);}); 
    ytm.close(); 
} 
})(); 

謝謝提前!

+1

爲什麼這麼痛苦的老版本的jQuery? – 2013-04-08 17:37:34

+0

@MattBall複製/粘貼。 – 2013-04-08 17:40:57

+1

@MattBall它也是jQuery必需的最低版本。如果該窗口已經有一個更新版本的jQuery導入,它就會使用它。 – Buck 2013-04-08 17:58:32

回答

2
function initMyBookmarklet() { 
    var ytm = window.open('http://example.com'); 
    jQuery(document).ready(function() { 

最接近的事情,你可能想要的是:jQuery(ytm.document).ready(function() {

然而,這可能無法工作或者是因爲你甚至不能確保文檔由該行執行的時候都存在。如何解決這個問題就像是一個全新的問題。

第2,第3和第4的答案是與此有關:jQuery/JavaScript: accessing contents of an iframe

 var div = ytm.document.getElementById("dl_link"); 
     var links = ytm.document.getElementsByTagName('a'); 
     var dl = links[1]; 

如果您正在使用jquery你不妨做這樣的事情div = $('#dl_link', ytm.document); dl = $('a', ytm.document)[1];

 window.open(dl);}); 

可能應該window.open(dl.href)

ytm.close(); 
} 

但是如果此書籤不在與打算打開的窗口相同的域上運行,那麼使用相同的源策略會出現更大的問題。在Google和Stackoverflow中搜索same original policy bookmarklet以瞭解更多信息。此外,第一個答案在這裏相關:jQuery/JavaScript: accessing contents of an iframe

0

根據該代碼,使用jquery的書籤代碼應位於名爲initMyBookmarklet的函數內。它不是,所以當你執行代碼時,jquery還沒有加載。

+0

與你的exp,你應該知道你在開發一個跨域名書籤時必須使用JavaScript – 2013-04-08 20:24:42

+1

@IonutFlaviusPogacian你可以在bookmarklets中使用jquery。它**是** javascript。 – 2013-04-08 20:27:32

+0

不,這不是!一個書籤需要純JavaScript代碼! – 2013-04-08 20:31:43