Javascript bookmarklet:单击以获取来自主机域的随机指定链接
tl;dr:在新选项卡中打开的书签:来自指定域的随机链接(具有指定的多个html类)和与当前登录名一起使用的代码。多谢各位 屠宰代码的简短版本:Javascript bookmarklet:单击以获取来自主机域的随机指定链接,javascript,html,bookmarklet,Javascript,Html,Bookmarklet,tl;dr:在新选项卡中打开的书签:来自指定域的随机链接(具有指定的多个html类)和与当前登录名一起使用的代码。多谢各位 屠宰代码的简短版本: javascript: ( var % 20 site = domain.com function() { window.location.host == site void(window.open(document.links[Math.floor(doc
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/
与之相关的人: 我已经搜索了一段时间,甚至考虑过交换服务,但尽管有些服务接近或类似于我的特定请求,但没有一个服务能够满足请求所要求的所有内容
//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的基本知识。如果此请求有任何人在gtfo模式下使用桌面、掌上电脑或其他方式,我深表歉意。令人遗憾的是,StackExchange中显然没有“警告:我自己动手做这件事”的标签。然而,我仍然希望答案能更深入地解释每一次修正和修改的原因和内容
现在感谢您的时间和努力。理论上,以下代码应该满足您的要求:
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';
但事实并非如此,因为跨页面卸载保留事件侦听器的可能性可能会被滥用,浏览器会保护您免受此类滥用
相反,您可以手动加载您选择的域,然后单击一个更简单的bookmarklet,其代码如下:
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,你会过得更好;一个很好的教程资源是。你在问什么?我们是否可以为你编写代码?@Pomax:抛开所有借口,当然可以,为什么不可以。我主要想看看是否有人能够理解并解释为什么上面的jslint站点不允许在代码中声明变量。这和我复制粘贴的基本工作是否等同于基本理解。不能撒谎。没有,除了我之外,没有其他居民代码爱好者。谢谢。我从中得到;您的第一个代码类似于“onload window,do this function”。尚未学习css属性,但我怀疑这是“class[href]”
。建议换行。不是以变量形式定义的,“randomtab”
是默认内置的吗?类似于“onmouseheel”“etc,但用于DOM类型请求。搜索几乎没有结果,除非您计算jquery。至于那些对死刑感到疑惑的人?首先只重定向到域。第二个只适用于当前页面上的链接。是的,我的第一个版本首先告诉窗口在加载新页面后应该做什么,然后再加载新页面a.class1[href]
表示“选择所有带有classclass1
且具有href
属性的
标记”。因此,class1
是类的名称,而点
表示您正在寻找一个类randomtab
是新打开的选项卡的自定义名称,它是窗口。open
需要作为其第二个参数。