teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

情報追加

2021/02/05 09:01

投稿

eneko0513
eneko0513

スコア349

answer CHANGED
@@ -23,9 +23,10 @@
23
23
  nameとか諸々デフォルトにしているので修正してください。
24
24
  ただ、要素のREMOVEをしても、動画自体が消えるわけではないので
25
25
  恐らく主さんが想像しているようなこととはちょっと違う結果になると思います。
26
- (プレイヤーは消えるが音声は再生されたまま)
26
+ (プレイヤーは消えるが音声は再生されたまま)
27
+ あとはホワイトリストにかからない動画を見る→ホワイトリストの動画を見る(そうするとプレイヤー領域が消えたままで、リロードをすると直る)これはYoutubeのページが非同期で画面を生成するような仕組みのため起きます。
27
28
 
28
- ここをどうするかはちょっとご自身で考えて工夫してみてください、多分実現はできると思います。
29
+ のようにいくつか課題がありますが、をどうするかはちょっとご自身で考えて工夫してみてください、多分実現はできると思います。
29
30
  例えばブラウザバックに変えるとか、別のアプローチもできるんじゃないかなと。
30
31
 
31
32
  それで原因だった所ですが、そもそもスクリプトが走るタイミングが画面を開いたときだったので、名前の要素の部分がない状態で取得処理が走っていました。

3

情報追加

2021/02/05 09:01

投稿

eneko0513
eneko0513

スコア349

answer CHANGED
@@ -10,4 +10,83 @@
10
10
  var testString = JSON.parse(document.querySelector("#scriptTag").innerText).author;
11
11
  ```
12
12
 
13
- ~~実現したいことが再生画面上に来てからというのがマストの要件なら仕方ないと思うのですが、個人的には開く前からそもそもリストから消えていてほしいなと思ったりしました。~~
13
+ ~~実現したいことが再生画面上に来てからというのがマストの要件なら仕方ないと思うのですが、個人的には開く前からそもそもリストから消えていてほしいなと思ったりしました。~~
14
+
15
+ // ここから追記
16
+
17
+ まず前提としてjquery関連は使わないようにしたほうが良いので無しにしましょう。
18
+ 外部ライブラリに依存すると仕様変更の追従が厄介になります。
19
+ 何か動作確認してみましたが何か他のJqueryとバッティングしているのか正しく動作しませんでした。
20
+
21
+
22
+ 自分の方でスクリプト組んでかんたんに動作確認したやつ貼ります。
23
+ nameとか諸々デフォルトにしているので修正してください。
24
+ ただ、要素のREMOVEをしても、動画自体が消えるわけではないので
25
+ 恐らく主さんが想像しているようなこととはちょっと違う結果になると思います。
26
+ (プレイヤーは消えるが音声は再生されたまま)
27
+
28
+ ここをどうするかはちょっとご自身で考えて工夫してみてください、多分実現はできると思います。
29
+ 例えばブラウザバックに変えるとか、別のアプローチもできるんじゃないかなと。
30
+
31
+ それで原因だった所ですが、そもそもスクリプトが走るタイミングが画面を開いたときだったので、名前の要素の部分がない状態で取得処理が走っていました。
32
+ コンソール上だと要素出てるから気づけなかったです。
33
+ なのでインターバルで名前の部分が出るまで待機してから削除処理をするようにしました。
34
+
35
+ ```javascript
36
+ // ==UserScript==
37
+ // @name New Userscript
38
+ // @namespace http://tampermonkey.net/
39
+ // @version 0.1
40
+ // @description try to take over the world!
41
+ // @author You
42
+ // @match https://www.youtube.com/watch?v=*
43
+ // @grant none
44
+ // ==/UserScript==
45
+
46
+ (function() {
47
+ 'use strict';
48
+
49
+ ///////////////////////
50
+ // EDIT WHITELIST HERE:
51
+ ///////////////////////
52
+
53
+ var whitelist = [
54
+ 'TheBackyardScientist',
55
+ 'Cody\'sLab',
56
+ 'The Slo Mo Guys'
57
+ ];
58
+
59
+ function searchStringInArray (str, strArray) {
60
+ for (var j=0; j<strArray.length; j++) {
61
+ var testStr = strArray[j].toLowerCase();
62
+ var matchStr = str.toLowerCase();
63
+ if (testStr.match(matchStr)) return j;
64
+ }
65
+ return -1;
66
+ }
67
+
68
+ var set_interval_id = setInterval(findTargetElement, 1000);
69
+
70
+ function findTargetElement() {
71
+ if(document.getElementById('scriptTag') != null) {
72
+ clearInterval(set_interval_id);
73
+ //alert('ページの読み込みが完了したよ!');
74
+ // Your code here...
75
+ //alert("main kokokara")
76
+ //Find the channel name on the page
77
+ var testString = JSON.parse(document.querySelector("#scriptTag").innerText).author;
78
+ // var testString ="hogehoge"
79
+ //alert(testString)
80
+ //Search for the channel name in the array
81
+ var searchVal = searchStringInArray(testString,whitelist);
82
+ //If the channel isn't present, then delete content and error out:
83
+ if (searchVal==-1) {
84
+ document.querySelector("#player-theater-container").remove();
85
+ //alert("This channel isn't on the Youtube whitelist!");
86
+ }
87
+ }
88
+ }
89
+
90
+
91
+ })();
92
+ ```

2

情報追加

2021/02/05 08:58

投稿

eneko0513
eneko0513

スコア349

answer CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  こちらを試してもらえますか?
9
9
  ```javascript
10
- var testString = JSON.parse($("#scriptTag").innerText).author;
10
+ var testString = JSON.parse(document.querySelector("#scriptTag").innerText).author;
11
11
  ```
12
12
 
13
13
  ~~実現したいことが再生画面上に来てからというのがマストの要件なら仕方ないと思うのですが、個人的には開く前からそもそもリストから消えていてほしいなと思ったりしました。~~

1

情報追加

2021/02/05 06:57

投稿

eneko0513
eneko0513

スコア349

answer CHANGED
@@ -5,8 +5,9 @@
5
5
  下記赤枠の所を取得するなら現時点のエレメントでは下記のコードで取れるんじゃないかなと思います。
6
6
  ![イメージ説明](a9c17e5901b28f975d86dab9a52fca22.png)
7
7
 
8
+ こちらを試してもらえますか?
8
9
  ```javascript
9
- $("a.yt-simple-endpoint.style-scope.yt-formatted-string").innerHTML;
10
+ var testString = JSON.parse($("#scriptTag").innerText).author;
10
11
  ```
11
12
 
12
13
  ~~実現したいことが再生画面上に来てからというのがマストの要件なら仕方ないと思うのですが、個人的には開く前からそもそもリストから消えていてほしいなと思ったりしました。~~