3

您好我正在尝试创建一个书签,它将打开一个网页,在该页面上找到一个下载链接,然后关闭该网页。除非有更好的方法,否则我会打开页面,调用就绪(我认为这是不工作的部分),然后搜索下载链接。导入jQuery的代码取自:http ://coding.smashingmagazine.com/2010/05/23/make-your-own-bookmarklets-with-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();
}
})();

提前致谢!

4

2 回答 2

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

最接近您可能想要的是:jQuery(ytm.document).ready(function() {

但是,这可能也行不通,因为您甚至无法确定该行执行时文档是否存在。如何解决这个问题就像一个全新的问题。

第二、第三和第四个答案在这里是相关的:jQuery/JavaScript: access 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:访问 iframe 的内容

于 2013-04-08T18:35:09.897 回答
0

基于该代码,您正在使用的小书签代码jquery应该在一个名为initMyBookmarklet. 不是,所以执行代码时 jquery 尚未加载。

于 2013-04-08T17:39:30.003 回答