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

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

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

各要素の名前の重複による衝突が起こらないよう、一意の名前をつけなければならない範囲のことであり、また、プログラミングにおける識別名を付加する機能のをNamespace(名前空間)と呼ぶ。

JavaScript

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

Q&A

1回答

1415閲覧

名前空間で宣言したものが変更できない

emble

総合スコア8

Namespace

各要素の名前の重複による衝突が起こらないよう、一意の名前をつけなければならない範囲のことであり、また、プログラミングにおける識別名を付加する機能のをNamespace(名前空間)と呼ぶ。

JavaScript

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

0グッド

2クリップ

投稿2019/01/18 13:17

編集2019/01/18 14:24

JS初心者です。
画面のサイズを取得した変数を必要に応じて更新したいのですが、更新後に値を確認すると0になってしまいます。

Javascript

1var Body = { 2 getPlayer: function(){return document.getElementsByClassName('player-video')[0]}, 3 ...//略 4} 5 6var Screen = {} 7Screen.width = 0 8Screen.height = 0 9 10var MyApp = { 11 updatePlayerStatus: function(){ 12 Screen.width = Body.getPlayer().clientWidth 13 Screen.height = Body.getPlayer().clientHeight 14 console.log(Screen.width)//ちゃんと表示される 15 }, 16} 17 18window.onload = function(){ 19 MyApp.updatePlayerStatus() 20 console.log(Screen.width)//ちゃんと表示される 21}

試したこと

おそらく別の場所でScreen.widthを使うと、値を持ってきただけで大元が変わるわけではないのだろうなぁなどと考え、宣言する場所を変えたりしてみましたが結果は変わらず、改善策が思いつきません。
どうすれば最初のScreen.width自体を変えることができるかご教示頂きたいです。

###追記
このコードはTampermonkeyでTwitchの配信視聴ページ(https://www.twitch.tv/ユーザー名)向けのスクリプトを書いた時のものです。一番重要な部分を書き忘れていました。申し訳ございません。
色々と試してみた結果、window.onloadではなく以下の様な方法で実行させると現象が起きました。

Javascript

1var Body = { 2 getPlayer: function(){return document.getElementsByClassName('player-video')[0]} 3} 4 5var Screen = {} 6Screen.width = 0 7Screen.height = 0 8 9var MyApp = { 10 updatePlayerStatus: function(){ 11 Screen.width = Body.getPlayer().clientWidth 12 Screen.height = Body.getPlayer().clientHeight 13 console.log(Screen.width)//正しく表示される 14 }, 15} 16////プレイヤーが読み込まれたら実行 17let retry_count=0 18var waitLoading = setInterval(function(){ 19 retry_count++ 20 if(retry_count > 10)clearInterval(waitLoading) 21 if(Body.getPlayer()!==undefined){ 22 MyApp.updatePlayerStatus() 23 console.log(Screen.height)//0 24 clearInterval(waitLoading) 25 } 26}, 1000)

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

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

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

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

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

akihiro3

2019/01/18 13:31

再現できるように、hemlやcssのコードを見せてください。
emble

2019/01/18 14:25

追記しました 申し訳ありません
guest

回答1

0

現象を再現出来ませんので、未出コードに原因があります。

Re: emble さん

投稿2019/01/18 13:34

think49

総合スコア18162

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

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

emble

2019/01/18 14:25

追記しました やはりそうだったようです 申し訳ございません
think49

2019/01/19 12:05

window.onloadでは現象が発生しないのですか。
emble

2019/01/21 04:30

発生しませんでした プレイヤーが読み込まれるまで待ってから実行すると発生します
think49

2019/01/21 10:16 編集

では、window.onloadで改善されたのでは?
emble

2019/01/31 03:54

window.onloadでは何故かプレイヤーが読み込まれる前に実行されてしまいエラーが出てしまうので使えませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問