0

Twitterのテキストエリアで何かを行う簡単なユーザースクリプトを書こうとしています。

Chromeでデバッグコンソールを使用する場合、「document.getElementsByTagName('textarea')」はテキストボックス(ツイートを入力する場所)を含む配列を返しますが、私のユーザースクリプトでは空の配列を返すだけです。私がここでやっている非常に基本的で間違っていることはありますか?「@run-atdocument-end」を使用した場合と使用しない場合の両方で試しましたが、両方を使用してもテキストエリアにアクセスできません。

読んでくれてありがとう!

// ==UserScript==
// @name twitter-edit
// @namespace foo
// @description twitter
// @match http://www.twitter.com/*
// @match https://www.twitter.com/*
// @match https://twitter.com/*
// @match http://twitter.com/*
// @run-at document-end
// ==/UserScript==

(function() {
    var textareas = document.getElementsByTagName('textarea');
    window.alert('textareas len ' + textareas.length); // <-- **THIS SOMEHOW RETURNS 0**
    if (textareas.length != 1) {
        window.alert('error');  
    } else {
        var tweetbox = textareas[0];
            window.alert('tweetbox: ' + tweetbox);
    }
}());   
4

2 に答える 2

0

スクリプトの実行時にtextareaがすでに存在していることを確認しますか?

ツイッターのDOMでテキストエリアを見つけることができますが、ページの静的htmlコードでは見つけることができないため、ページの掲載料の後にロードされる可能性があります。textareaがそこにあると、スクリプトがロードされます。

于 2011-07-24T21:40:25.197 に答える
0

そのサイトはajaxに非常に感染しており、少なくとも1つのiFrameに飛び込んでいるため、スクリプトがそのテキストボックスを表示できるようになるまで少し待つ必要があります。

また、Twitterでリンクをたどると、AJAXメソッドによってページが変更されることがよくあります。その場合、通常のスクリプトは起動しません。

これを補うために、そのTwitterボックスを継続的にチェックし、ページがajaxによって「リロード」されるときに、新しいボックスをキャッチするタイマーを設定するだけです。

このスクリプトは機能します:

// ==UserScript==
// @name twitter-edit
// @namespace foo
// @description twitter
// @match http://www.twitter.com/*
// @match https://www.twitter.com/*
// @match https://twitter.com/*
// @match http://twitter.com/*
// @run-at document-end
// ==/UserScript==

//--- This handles both page-load delays, and AJAX changes.
setInterval (function() { checkForTweetbox (); }, 500);

function checkForTweetbox () {
    var tweetbox = document.querySelector ('div.tweet-box textarea');
    if (tweetbox) {
        if (! tweetbox.weHaveProcessed) {
            tweetbox.weHaveProcessed    = true;
            alert ('New tweet-box found!');
        }
    }
}
于 2011-07-25T00:25:43.137 に答える