我有一些我希望在mywebsite.com/x.html
上运行的代码
(其中x
可以是任何东西)。
以下代码(我希望)会在网页上找到ID为'mybutton'的按钮,并在延迟1秒后自动点击它:
<script>
window.onload = function() {
setTimeout('document.getElementById('mybutton').click()', 1000);
}
</script>
我用Google搜索并找到了Tampermonkey Chrome扩展程序,但唯一的问题是我不知道如何仅在上面提到的特定网页上运行它。
我有点把我的代码打到了Tampermonkey给出的示例布局的末尾并得到了这个:
// ==UserScript==
// @name My Fancy New Userscript
// @namespace http://your.homepage/
// @version 0.1
// @description enter something useful
// @author You
// @match http://website.com
// @grant none
// ==/UserScript==
<script>
window.onload = function() {
setTimeout('document.getElementById('mybutton').click()', 1000);
}
</script>
如何让它在开头提到的特定网页上运行?
答案 0 :(得分:3)
有几件事:
要将操作仅限于.html
个页面,请检查location.pathname
(见下文)
或使用@include
。 EG:
// @include http://website.com/*.html
为了精确度和性能,我建议使用@match
以上@include
。
在@match
指令的末尾,您几乎总是需要通配符。 EG:
// @match http://website.com/*
请注意,@include
中的通配符更加灵活,但它们更安全且更安全。并在@match
s。
您无法在用户脚本中添加直接HTML标记,如<script>
。无论如何,在这种情况下根本不需要它。
您在用户脚本中很少需要window.onload
。 在大多数情况下,默认情况下,用户脚本会在理想的时间点亮。
请勿使用&#34; eval&#34; setTimeout
中的字符串。这有性能,故障排除和安全问题 - 如果它可以工作的话
问题的setTimeout
使用了大部分问题,也存在语法错误。
直接.click()
来电有时会有效,many times not
如果它不起作用,发送a click event。
避免任意计时器。 EG:setTimeout(..., 1000);
这是&#34;定时炸弹&#34;码。它有时会起作用。其他时候,页面将被延迟。当它工作时,它可能会使你的脚本减慢到远远超过必要的程度
使用an AJAX aware utility。请参阅以下代码。
总而言之,使用jQuery和标准实用程序来节省工作并提高稳健性,您的脚本将是这样的:
// ==UserScript==
// @name _Auto click the X button on Y pages
// @match http://website.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
//--- Does the *path* part of the URL end in `.html`?
if (/\.html$/i.test (location.pathname) ) {
waitForKeyElements ("#mybuttonID", clicktargetButton);
function clicktargetButton (jNode) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
}
}
答案 1 :(得分:1)
您可以使用星号作为外卡来定义Tampermonkey代码将运行的网页。
所以这使它适用于您网站的任何子目录:
// @match http://www.mywebsite.com/*
要使其与html页面一起使用,请更改外卡:
// @match http://www.mywebsite.com/*.html
答案 2 :(得分:0)
您可以使用以下代码通过纯javascript获取当前网址片段:
var url = window.location.pathname.split( '/' );
所以,如果你的链接是mywebsite.com/about,那将是url [1]
您可以定义要在其中执行代码的页面数组,然后使用当前URL检查
var url = window.location.pathname.split( '/' );
var pages = ['home', 'about', 'services'];
for(var i=0; i<pages.length; i++) {
if(pages[i] === url[1]) {
// execute your code
}
}