0

だから私はこのスクリプトを持っています:

links = document.getElementsByClassName('thumb');
for (var i=links.length-1; i>=0; i--)
{
links[i].href=links[i].href+'/popout';
}

変更したいページがロードされた後、スクラッチパッドで機能します。

しかし、グリースモンキーに入れると、ページが完全にロードされる前に実行され、変更する必要がある要素がそこになく、機能しません。

gsスクリプトは次のとおりです。

// ==UserScript==
// @name        popout
// @namespace   PylonPants
// @include     http://*.twitch.tv/directory/*
// @version     1

// ==/UserScript==

//if ('loading' == document.readyState) {
//  alert("This script is running at document-start time.");
//} else {
//  alert("This script is running with document.readyState: " + document.readyState);
//}
// script runs at readyState = interactive and that brakes it
// do not know how to make it wait till complete

links = document.getElementsByClassName('thumb');
alert(links[0]); // i get "undefined"
for (var i=links.length-1; i>=0; i--)
{
alert('the script works'); //i never reach here
alert(links[i].href); // nor here
links[i].href=links[i].href+'/popout';
}
alert('crazy'); // i get this then the page loads fully.
4

1 に答える 1

1

スクリプトは、ページの JavaScript がこれらのサムネイルをロードするまで待機する必要があります。これを行うための最も簡単で堅牢な方法は、waitForKeyElements() ユーティリティを使用することです。

jQueryを使用してそれらを変更する完全なスクリプトを次に示します。waitForKeyElementshref

// ==UserScript==
// @name        popout
// @namespace   PylonPants
// @include     http://*.twitch.tv/directory/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/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.
*/

waitForKeyElements ("a.thumb", adjustLinkHrefs);

function adjustLinkHrefs (jNode) {
    var newAddr = jNode.attr ("href") + '/popout';
    jNode.attr ("href", newAddr);
}
于 2013-03-26T04:34:03.570 に答える