• ベストアンサー

GreaseMonkeyについて

まだjavascriptの勉強をし始めて、2日目の者です。 そこで、質問です! GreaseMonkeyで、 <dd class="b-click"> <a href="http://xxx">クリック</a> </dd> というものが含まれるページがあるとします。 この『http://xxx』に移動するためには、 どういうスクリプトを書けばいいのでしょうか。 自分なりに、いろいろやってみたのですが、 全く反応がなかったので、質問させていただきました。 回答よろしくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

ああ、ごめん。HTMLを貼りつけ忘れた。 ------------------------------------------ <dd class="b-click"> <a href="http://xxx">クリック</a> </dd> <dd class="b-click"> <a href="http://yyy">クリック</a> </dd> <dd class="b-click"> <a href="http://zzz1">クリック</a> <a href="http://zzz2">クリック</a> </dd> <script type="text/javascript"> // ddタグを取得 var dd = document.getElementsByTagName('dd'), a, output = []; // ddタグの個数分チェックする。 for( var i = 0; i < dd.length; i++ ) { // ddタグがclass="b-click"を持っているかチェック // 持ってなかったら何もしない。 if( dd[i].getAttribute('class').indexOf('b-click') > -1 ) { // ddタグの子要素にaタグがあるかないかチェック a = dd[i].getElementsByTagName('a'); for( var j = 0; j < a.length; j++ ) { output += a[j].href + '\n'; } } } alert( output ); </script> ------------------------------------------

WHsp
質問者

お礼

いろいろとありがとうございました! if( dd[i].getAttribute('class').indexOf('b-click') > -1 ) だとなぜか動かなかったので、 if((dd[i].getAttribute('class'))&&(dd[i].getAttribute('class').indexOf('b-click') > -1) ) { に書き換えたら動きました! 最後まで答えていただき、本当にありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

ごめんね。僕も言い過ぎました。 それはそれとして、 これでどうかな? わからなかったら質問すべし。 ----------------------------------------------------- // ddタグを取得 var dd = document.getElementsByTagName('dd'), a, output = []; // ddタグの個数分チェックする。 for( var i = 0; i < dd.length; i++ ) { // ddタグがclass="b-click"を持っているかチェック // 持ってなかったら何もしない。 if( dd[i].getAttribute('class').indexOf('b-click') > -1 ) { // ddタグの子要素にaタグがあるかないかチェック a = dd[i].getElementsByTagName('a'); for( var j = 0; j < a.length; j++ ) { output += a[j].href + '\n'; } } } alert( output ); -----------------------------------------------------

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

同じwindowでどうやって、複数ページに遷移するの? 具体的な動作が不明確なのでこれ以上作らない。 基本部分のスクリプトを提示しましょう。 コピペで動く。 --- // ==UserScript== // @name jsredirect // @namespace benikujyaku // @include * // ==/UserScript== (function() { new function() { // iframe内では実行させない if (window != unsafeWindow.top) { return; } var target = document.getElementById('hoge'); if( target ) { document.location = target.href; } else { alert( 'このページにはid = hogeのaタグが存在しません。' ); } }(); })(); ------------------------------------- getElementsByTagName()まで書けてるなら、 -------------------------- var a = document.getElementsByTagName('a'); var a = a[0].href; -------------------------- で取得できるよ。 これは配列です。 jsを作る時はfirefoxとfirebugでconsole.debug()が便利だよ。 *** プログラミングの動作仕様を文章で説明するのは高等テクニックが必要だから、 スクリプトでやりとりするのが吉じゃないかな、と思うよ。

WHsp
質問者

お礼

reggaepuncさんに指摘していただいた点を直そうと思います。 回答ありがとうございました^^

WHsp
質問者

補足

すいません、自分の文が誤解をよんでしまって。 >同じwindowでどうやって、複数ページに遷移するの? そういう意味ではなくて、a要素が複数あるページの、 例えば、 // ==UserScript== // @name example // @namespace example // @description example // @include xxxx://xxx.xxx/* // ==/UserScript== (function() { new function() { // iframe内では実行させない if (window != unsafeWindow.top) { return; } var target = document.getElementsByTagName('a'); var a = target[0].href; if( target ) { document.location = a; } else { alert( 'このページにはid = hogeのaタグが存在しません。' ); } }(); })(); こういうものだと、 一番最初のa要素のhrefにページ移動してしまうわけじゃないですか。 xxxx://xxx.xxx/1 だとこのa要素10個目にあって、 xxxx://xxx.xxx/2 だと13個目にあったりと、 ページごとにa要素の場所が違ってしまいます。 <dd class="b-click"> <a href="yyyy://yyyy.yyy">クリック</a> </dd> なので、自分としては、 このClass"b-click"から子ノードaのhrefに移動するよう、 プログラムを書いてみたのですが、 うまく動かなかったのです。 自分としては、その方法を教えてもらいたかったのですが、 この質問文では意味不明ですね、すいません。 >具体的な動作が不明確なのでこれ以上作らない。 ごめんなさい、不快にさせてしまって。 >jsを作る時はfirefoxとfirebugでconsole.debug()が便利だよ。 console.debug()については知りませんでした。 ありがとうございます^^ >プログラミングの動作仕様を文章で説明するのは高等テクニックが必要だから、 >スクリプトでやりとりするのが吉じゃないかな、と思うよ。 そうですね、ご指摘ありがとうございます。 初質問だったもので・・・。 これからはそうしていきたいと思います。 回答ありがとうございました^^

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

リンクが複数ある時は別ウィンドウでページを表示させるということでしょうか? スクリプトのロジックしては、 aタグのhrefを取得 ↓ document.locationでページ移動する。 で、いけるはずですが。

WHsp
質問者

補足

同じウィンドウでも構いませんが、 そのaタグのhrefの取得方法でつまづいています。 getElementsByTagNameで取得しようとしても、 a要素が複数あるので。 また、親ノードから子ノードを取得しようとしてもうまくいかなかったので。 できれば、スクリプトの内容を示して欲しいです。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

移動するのは、いつですか? ページを読み込んだ時に自動(クリック無し)で移動したいということですか?

WHsp
質問者

補足

回答ありがとうございます! すいません、説明不足で。 >移動するのは、いつですか? 5秒でお願いします。 >ページを読み込んだ時に自動(クリック無し)で移動したいということですか? はい、そういうことです。 また要素は数十個あります。 回答よろしくお願いします^^

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Greasemonkeyを使えるようになりたいのですが プログラミング

    Greasemonkeyを使えるようになりたいのですが プログラミング初心者がJavaScript知識なしで 一から覚えるのはどうすればよいでしょうか? ユーザーサイトが減ってるような気がしますが Greasemonkeyって まだ 使いやすいのでしょうか? Greasemonkey Greasemonkey(グリースモンキー)とは、Mozilla FirefoxおよびSongbird用の拡張機能。後述のユーザスクリプト形式に従ったJavaScriptを組み合わせて、ウェブページ閲覧時に実行することができる。 Greasemonkey - Wikipedia http://ja.wikipedia.org/wiki/Greasemonkey JavaScript - MDC https://developer.mozilla.org/ja/JavaScript Greasespot http://www.greasespot.net/ mozdev.org - greasemonkey: authoring http://greasemonkey.mozdev.org/authoring.html

  • Greasemonkeyでsubmit

    FirefoxのGreasemonkeyで、JavaScriptを使ってページを簡単にしたり、フォームに自分なりの初期値を埋めておいたりしています。 フォームのsubmitをJavaScriptで自動実行することは出来るでしょうか? 今は項目だけ自動で埋めて、submitボタンを押すのだけ手動でクリックしてます。

  • Greasemonkeyでスプリクトが反映されない

    当方、FireFoxを使い始めて一週間も経っていない者です。 どうしても使用したい機能があり、 Greasemonkeyを使ってスプリクトをインストールしようと思ったのですが、 スクリプトをインストール後にステータスバーにいる猿を右クリックしても 「スクリプトはインストールされていません!」と表示されます。 「ユーザスプリクトコマンド」の部分も灰色で選択できません。 インストールした時、右下に「インストールに成功しました」とポップアップ?も表示されるし 右クリックで「ユーザスクリプトの管理」を確認しても、ちゃんとインストールされています。 「無効化」にもなっていないし、 削除して何度かインストールし直したり、FireFoxを再起動しても反映されません。 ネットで色々調べて、他の拡張機能を全て停止しGreasemonkeyだけにしても やはり結果は変わりませんでした。 Greasemonkeyではなく、このスクリプトが悪いのかな?と思ったのですが どうやら他のスクリプトも反映されないようです・・・。 Greasemonkeyだけでなく、FireFoxから再インストールが必要でしょうか? スクリプトというものも今回初めて関わるようなずぶの素人なのですが、 必要であればスクリプトを弄る事にも挑戦します。 詳しい方、どうか宜しくお願いします。 --------------------------------------------- 参考までに。 ※こちらのサイト様を見ながらGreasemonkeyをインストールしました。  (ちなみにこの中で紹介されているスクリプトも反映されませんでした・・・)  http://google-mania.net/archives/213#toc-greasemonkey1 ※このスクリプトを使用したいのです。  「Google Cache Continue Redux」  http://userscripts.org/scripts/show/30878

  • greasemonkeyで通知を自動クリックしたい

    http://www.pinterest.com/ こちらのサイトを開いていた際にフォローしている方が新しいピンを追加するとヘッダーに通知ボタンが表示される仕組みになっております。Twitterのサイトでいうところの「N件の新しいツイート」と同じ機能です。 この通知ボタンが表示されたらスクリプトで自動クリックしたいと考えています。 開発ツールでクリックする要素(class)を探し、 <div class="Module NewPinsIndicator" style="display: block;">2 新しいピン<em class="arrows"></em></div> greasemonkey(正確にはgoogle chromeでTampermonkeyを使用してます)で function click(target) { var event = document.createEvent("MouseEvents"); event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); target.dispatchEvent(event); } function main(){ var newpin =document.getElementsByClassName('Module NewPinsIndicator'); if(newpin) click(newpin); setTimeout( function() { main(); }, 5000); } main(); このようなスクリプトにしたのですが知識不足のため、このサイトでは動作しませんでした。 Pinterestの新着通知を自動でクリックする方法をよろしければスクリプト込みでご教授いただけないでしょうか。 よろしくお願いいたします。

  • 特定部分のテキストを取得したい

    あるテンプレートに添って作られたページからテキストを取得するブックマークレットを作りたいのですが、 下記のような構造のページから りんご、みかん、ぶどう、部分のテキストだけ抜き出して取得するにはどうすればいいでしょうか? <h1 id="hoge">りんご</h1> ~ <span class="fuga"> <a href="test.html">みかん</a> </span> ~ <div class="piyo"> <dl class="foo"> <dt>xxx</dt><dd>ぶどう</dd> <dt>xxx</dt><dd>xxx</dd> <dt>xxx</dt><dd>xxx</dd> </dl> </div>

  • jquery ドロップダウン・メニュー

    jquery ドロップダウン・メニュー ドロップダウン・メニューを作成しています。一番最後のtwitter部分だけにクリック動作を適用させたいのですが、 思うように表示が出来ません。 どうしたらいいのか、教えてください。 <script src="/jquery/jquery-1.4.2.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $('li.twitter').click(function() { if ($(this).hasClass('click')) { $(this).removeClass('click'); } else { $('.click').removeClass('click'); $(this).addClass('click'); } }); $('div.drop').hover( function() { $(this).addClass('hover'); }, function() { $(this).removeClass('hover'); }); }); </script> <div id="feed"> <ul class="aux"> <li class="rss1"> <a href="http">RSS1</a> </li> <li class="rss2"> <a href="http">RSS2</a> </li> <li class="rss3"> <a href="http">RSS3</a> </li> <li class="twitter"> <a href="#"><span>Twitter</span></a> <div class="drop"> <p><strong>TW1</strong> <a href="http://www.twitter.com/●●" target="_blank"><img src="http://abcde/a.png" />Follow Me</a> </p> <p> <strong>TW2</strong> <a href="http://www.twitter.com/●●●●●" target="_blank"><img src="http://abcde/b.jpg" />Follow Me</a> </p> </div> </li> </ul> </div>

  • スクリプト 埋込み方法

    こんにちは、 下記のようにして、 data-url=<script type="text/javascript">location.href</script> のところに、ページのアドレスを入れようとしているのですが 反応してくれません。どのように記述すれば良いのでしょうか? <a href="http://twitter.com/share" class="twitter-share-button" data-url=<script type="text/javascript">location.href</script> data-text="発売日" data-count="horizontal" data-lang="ja">Tweet</a>

  • <Dw>新しいページの作成方法<html>

    親ページがあり、開く子ページをxxx.htmlとyyy.htmlとします。 <a href="javascript:void(0)" onClick="window.open('xxx.html', 'newwin','width=520,height=250')"> xxxページが開きます</a> これでクリックするとxxx.htmlが開くには開くんですが、親ページに戻ると、(親ページをアクティブにする)xxxページは親ページの後ろに隠れてしまいました。そこでもう一度リンクをクリックしても、xxx.htmlはアクティブになりません。親ページをずらさないと見えないのです。 次に、 <a href="javascript:void(0)" onClick="window.open('yyy.html', 'newwin','width=520,height=250')"> yyyページが開きます</a> クリックすると、yyy.htmlが開きません。 ・・・と思ってよく見たら、親ページの後ろに隠れていた、先ほど開いたxxxページがyyyページに切り替わっていました。 そこで質問なんですが、 1.xxxとyyyを別々のウィンドウで開きたい。 2.一度開いたページでも、リンクをクリックしたら隠れていたページがもう一度表示されるようにしたい。 jsでなくとも、問題がなければ方法は問いません。 博識な方、お返事どうぞよろしくお願い致します。

  • userscriptでリンククリック以外で実行

    Greasemonkeyでページをミドルクリックするとページトップへ移動するスクリプトを書いたのですが、 リンクをミドルクリックしたときもページトップへ移動してしまいます。 リンクをミドルクリックしてもページトップへ移動しないようにするにはどうすればいいのでしょうか? (function() { document.addEventListener("click", function(event) { if (event.button != 1) return; window.scrollTo(document.documentElement.scrollLeft,0); }, false); })(); 以上です。 よろしくお願い致します。

  • リンク先のJavaScriptを実行するリンク

    a.htmには以下のようなJavaScriptが記載されています。 <a href="javascript:c_click(1)">test</a> a.htmの中にはclick内の数字が1~50程度のリンクがあり、 数字に応じて異なるJavaScriptが実行されるページです。 b.htmからa.htmの上記の<a href="javascript:c_click(1)">test</a>が実行されるリンクを作ることは可能なのでしょうか。 たとえば、b.htmに以下のようなHTMLを記述することを想定しています。 <a href="a.htmのjavascript:c_click(1)">test</a>

このQ&Aのポイント
  • プリンター故障のため、保証を使い交換してもらいたいと相談したい。
  • お使いのプリンター(MFC-J1605DN)が故障してしまったため、保証を利用して交換してもらいたいと考えています。
  • プリンターの故障により困っています。修理ではなく、保証を使って交換してもらいたいのですが、相談できる方法はありますか?
回答を見る