bookmarklet:单击来自主机域的随机指定链接

时间:2014-07-27 17:26:54

标签: javascript html bookmarklet

tl; dr:在新标签页中打开的书签:来自指定域的随机链接(具有指定的多个html类)以及适用于当前登录的代码。谢谢。

屠杀代码的简短版本:

    javascript:
    (
        var % 20 site = domain.com
        function() {
            window.location.host == site
            void(window.open(document.links[Math.floor(document.querySelectorAll("a.class1, a.class2"))].href, '_blank'))
        }();
//beautified with: http://jsbeautifier.org/





可能关注的人: 我已经搜索了一段时间,甚至考虑过切换服务,但是有些接近或类似于我的特定请求,没有一个能满足请求所需的一切。

  1. 即使当前未打开来自所述域的页面,也会在特定域上执行该脚本。如果需要登录验证以获取要执行的信息或数据,请阅读或与现有会话一起使用。

  2. 从特定域名主机中获取该域名中所有链接中的随机链接,使用某个html级别(或者实际上是其他方式),最好使用css选择器。

  3. 在新标签页中打开结果。

  4. 从屠杀这些相似之处,结果变成了这样的结果:

        //bookmarklet
    javascript:
    //anonymous function+ wrapped code before execution
    (
    // function global variables for quick substitution
      var %20 site = domain.com
    function(){
    //set domain for script execution
    window.location.host == site
    //open new tab for
    void(window.open(document.links
    //random link
    [Math.floor
    //with specific classes (elements found with css selectors)
    (document.querySelectorAll("a.class1, a.class2"))
    ]//end random-query
    .href,'_blank' //end page-open
    )//end link-open
    )//end "void"
    }//end function defintion
    //execute
    ();
    //(tried) checked with: 
    //http://www.javascriptlint.com/online_lint.php
    

    最后,我最多获得了基本的CSS知识。我很抱歉,如果这个请求有任何人在www.fofo模式下进行翻版,手掌或其他方式。很遗憾显然没有"警告:我在StackExchange中DIY这个东西" 。但是,我仍然希望得到一些深入解释原因以及每次修正和修改的答案。

    感谢您的时间和精力。

1 个答案:

答案 0 :(得分:0)

理论上,以下代码应该按照您的要求执行:

window.addEventListener('load', function ( ) {
    var query = 'a.class1[href], a.class2[href]';
    var candidates = document.querySelectorAll(query);
    var choice = Math.floor(Math.random() * candidates.length);
    window.open(candidates.item(choice).href, 'randomtab');
}, true);
window.location.href = 'http://domain.com';

但它没有,因为在页面卸载时保留事件监听器的可能性可能被滥用,浏览器会保护您免受此类滥用。

相反,您可以手动加载您选择的域,然后使用以下代码单击更简单的书签:

var query = 'a.class1[href], a.class2[href]';
var candidates = document.querySelectorAll(query);
var choice = Math.floor(Math.random() * candidates.length);
window.open(candidates.item(choice).href, 'randomtab');

你可以将上面的内容包裹在javascript:(function ( ) { ... })();中并像以前一样缩小,但如果你只是缩小它并且只拍了一个javascript:,它就已经有效了。

我理解你作为一个绝对的初学者和发布" DIY"代码,但我仍然不会逐步解释为什么这段代码有效,而你的代码却没有。上面代码的第一个版本很难向初学者解释,问题中代码的问题列表太长,无法讨论所有这些问题。通过学习更多Javascript,你会变得更好;有教程的好资源是MDN