質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1302閲覧

新しいタブでのJavascriptコード

tetNZ

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2023/03/12 18:44

編集2023/03/13 01:10

新しいタブでのJavascriptコード

ここに実現したいことを箇条書きで書いてください。

  • 新しいタブを開き、そのページ内でのDOM操作

前提

現在Javascriptベースで作業効率化のスクリプトを作っています。
現在は対象のリンクを手動で開き、その新しく開いたページへ移動し、ブックマークレットを手動でクリックすると、動作するスクリプトがあります。
そのスクリプト改善しブックマークレットをクリックするだけで、新しいタブを自動で開きその新しいページで対象スクリプト実行してくれるようにしたいです。

[環境]
ChromeのDevTool上にて

■■な機能を実装中に以下のエラーメッセージが発生しました。
下記のコードでは新しいページで対象のクラスを選択してクリックするなどスクリプトが機能してくれません。アラートやコンソールも新しいタブを開く以前のページ(元のぺージ)で表示されます。
*AddeventListnerではなくて、直接newTab.alert()にすることで新しく開いたタブでもアラート文字が表示されることを確認しました。

newTab.document (newTabDoc)は古いブラウザ(新しく開く前のブラウザ)側のDocumentを指示しているようです(新しいブラウザ側のDocumentではない)

該当のソースコード

Javascript

1ソースコード 2// Open a new tab  3let newTab = window.open("http://test.com");  4 5newTab.addEventListener("load", function() { 6 7let newTabDoc = newTab.document;  8setTimeout(()=>{ 9let test1 = newTabDoc.getElementsByClassName('class1')[1] 10test1.click(); 11let test2 = newTabDoc.getElementsByClassName('class2')[3] 12test2.click();  13let test3 = newTabDoc.getElementsByClassName('class3')[3] 14test3.click(); 15} 16, 1000) }); 17 18### 試したこと 19 20CHATGPTを参考に色々試しました。 21例えばnewTab.document.write("<script>alert('Hello from the new tab!');</script>");など 22 23newTab.alert() や newTab.console.log() 24~~も試しておりましたが新しいブラウザの方で反応なしです。~~ 25 26newTab.onload = function(){ 27alert() 28let newTabDoc = newTab.document 29} 30 31の形で新しいブラウザ側へのアラート表示が出来ましたが、newTabDoc の中身は空のようです 32 33{+++++++++++++追記++++++++++++++++++} 34 35色々検索した限り同様のコードが示されていますが、うまく動作しません。 36 37どうぞご教示頂けますようよろしくお願い致します。 38 39 40

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2023/03/12 21:58

> 対象のクラスを指定してくれません。 これはどういう意味でしょうか。具体的に何が起きるのですか。ブラウザの開発者ツールのコンソールに何か出ていませんか。 > アラートやコンソールも新しいタブを開く以前のページ(元のぺージ)で表示されます。 newTab.alert() や newTab.console.log() と書く必要があります。
tetNZ

2023/03/12 22:20

言葉たらずですみません! 希望のコードは、新しいブラウザにあるエレメントをクラスで指定して、その要素をクリックするというものでしたので、そういった表現を使いました。 newTab.alert() や newTab.console.log() も試しておりましたが新しいブラウザの方で反応なしです。
int32_t

2023/03/12 22:28 編集

コード上で何が起きているのかを具体的に説明してください。たとえば、 let test1 = newTabDoc.getElementsByClassName('class1')[1] が実行されたときに何が起きますか? 「test1 が null になる」「コンソールに〜というエラーが出る」などです。
tetNZ

2023/03/13 01:14

ご丁寧にありがとうございます。 実はエラーメッセージ等はなくて、AddeventListnerを使用の際には何も表示されることなく(エラーもなく)コードが通ってしまっているよで、おそらくEventが作動していないように思っています。 代わりに、window.onloadにて試したところ新しいタブ側へのアラート表示が出来るようになりましたが、newTab.documentで返ってくるはずと理解している新しいタブ側のHTMLが、実は空表示になってしまいます。 <body> <html></html> </body> のような状態です。 以上説明下手で申し訳ございませんがぜひお知恵をお借り出来たら幸いです。
int32_t

2023/03/13 01:28

ブックマークレットの実行を始めるタブのドメインは新しいタブ(質問文では "http://test.com")のドメインと同一ですか? コンソールをチェックするときは、新しいタブのコンソールと実行開始ページのコンソールのどちらを見てますか?
tetNZ

2023/03/13 02:02

>>>ブックマークレットの実行を始めるタブのドメインは新しいタブ(質問文では "http://test.com")のドメインと同一ですか? その通り、同一です。 すみません会社のURLなのでお見せできないのが恐縮です。 コンソールは元(実行開始)のページを確認しています。 新しいタブ先のコンソールはちなみに無表示です。
guest

回答1

0

newTab.document がほぼ空っぽということは、load イベントのタイミングでは実際にほぼ空っぽで、それより後にコンテンツが挿入されるのでしょう。欲しいコンテンツが出てくるまで MutationObserver などで待つしかありません。

投稿2023/03/13 02:15

int32_t

総合スコア20878

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問