
javaScriptでChromeの画面を操作しようとしているのですが、
スクリプトの最初に var wCode = ""; と宣言しまして、
タイムインターバル(setInterval)で1分毎に動く関数を作成、
addリスナー(addEventListener)関数で、別スクリプトから、
変数 wCode に値をセットしました。(値のセットは確認できました)
グローバル変数だからタイムインターバルの関数でも、
イベントリスナーでセットされたタイミングで、
wCode に値が入る思っていましたが、値が入ってきません。なぜでしょう。
1分毎に画面の状態を監視するスクリプトにしたいのです。
作り方に何か問題があるのでしょうか。
いわゆるマニフェストを作成して、準備したコンテンツJs
ではローカルファイルのデータを読むことができないように、
何かの制約があるのでしょうか。
ちなみにソースは別の場所にあるので、残念ながら掲載できません。
変数のスコープと言うものを勉強してみましたが、
特に潰し合いをするような作りもしていないつもりです。
この質問の原稿を書いていて思いついたのは、
イベントリスナーの関数の中に、入れ込むような形で、
タイムインターバルの関数を書けば、解決できるでしょうか。
javaScriptは初心者なので教えてください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんにちは
曖昧なご質問なのと、文章ののあちこちに意味不明のところがあるのでなんともわかりかねますが…
>ソースは別の場所にあるので、残念ながら掲載できません。
再現できる最低限の単純化したものを示さないと、何をやっているのかすらわかりません。
ましてや、質問者様が何をわからないのかは「神のみぞ知る」状態かと。
一般論で言えば、
グローバル変数はグローバルオブジェクトのプロパティです。
ウェブブラウザの場合は、windowオブジェクトがグローバルオブジェクトに当たります。
原則として、グローバル変数は、他の全てのスコープから参照可能です。
…となりますが、あくまでも文書単位なので、別文書や別window間で直接的に別のグローバル変数を参照しようとしてもできません。
適当に、ありそうな例を挙げてみると…
・異なる環境(文書等)間で参照しようとしている
・グローバル変数のつもりがそうなっていない
・ローカルなスコープに同名の変数が存在する
・setInterval等の遅延関数を使っているようですが、実行のタイミングを勘違いしている
・・・・・
・・・・・
などなど…
例えば、
let v = 1;
setTimeout(()=>{ v = 10; }, 1000);
console.log(v); //→ 1 と出力される
で、10と出力されるのを期待するとか…
あるいは、Timeoutの実行待ちをして、
let v = 1;
setTimeout(()=>{ v = 10; }, 1000);
let a = 1, t = Date() + 1500;
while( Date()<t ){ a = ++a % 10; }
console.log(v); //→ 1 と出力される
で、10 と出力されるのを期待するとか…
というような辺りが、オチのような気もしますが‥‥?
わざわざありがとうございました。
別の変数を立てて処理を単純化したら、期待通りに値が入りました。
結局の所、イベントが二重に発生していて、セットした値を消していました。
お騒がせして申し訳ありませんでした。
今後はもっとあれこれ調べてから質問するようにしたいと思います。
解説ありがとうございます。とても参考になりました。
No.2
- 回答日時:
普通にやれば問題なさそうですけどね・・・
<script>
var num=1;
window.addEventListener('DOMContentLoaded', ()=>{
document.querySelector('#view').textContent=num;
setInterval(()=>{
num++;
document.querySelector('#view').textContent=num;
},1000);
document.querySelector('#btn').addEventListener('click',()=>{
num+=100;
document.querySelector('#view').textContent=num;
});
});
</script>
<input type="button" id="btn" value="+100">
<div id="view"></div>
色々ありがとうございます。
結局の所、イベントが二重に発生していてセットした値を消していました。
いただいたソースコードは少々難解なのですが、勉強しようと思います。
また、今後はもっとよく調べてから質問したいと思います。
お騒がせして申し訳ありませんでした。回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- Excel(エクセル) [Excel2016] 相関表等の自動作成 2 2022/08/01 20:34
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- 統計学 統計分析とExcelに詳しい方、何卒よろしくお願いいたします。 6 2022/05/27 10:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスを認識・不認...
-
VBSを学ぶ前に、、、
-
画面間でのJavaScrip...
-
タブブラウザで focus() を実...
-
Webページ中の javascript をVB...
-
event.srcElementの動的設定
-
JSでファイル数取得
-
javascriptで最初のところに戻...
-
javascriptでフォルダ内のファ...
-
JSPの処理の途中で、JavaScript...
-
JavascriptでのExcel起動について
-
safariではロールオーバー機能...
-
チェックボックスのチェックの...
-
禁止文字チェック
-
gas 全角数字を半角数字に変換
-
delete[]と、delete演算子の明...
-
ページ遷移時にアコーディオン...
-
Excelのマクロ一括実行ができな...
-
C#でTextBoxに数値のみ入力可能...
-
JavaScriptで ブラウザの閉じる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaScriptでグローバル変数に...
-
ローカルのレジストリを読みたい
-
Webページ中の javascript をVB...
-
jQueryで、listの要素数を取得...
-
JavaScript 日数計算の関数で演...
-
JavaScriptは具体的に何ができ...
-
Javascript; フィールドの属性変更
-
イベントevt?evt.target:event....
-
Javascriptの全ての文法やオブ...
-
JavaScriptで複数のプロパティ...
-
CGIを呼び出した場合の戻り値を...
-
JSの「document.getElementById...
-
オライリーのプログラミングPHP...
-
split
-
エクセル2010のvbaについて
-
evtとは
-
クラス デフォルトプロパティの...
-
jquery か javascript で json ...
-
ASP.NETでURLにマッピングされ...
-
Dateオブジェクトの大小比較の...
おすすめ情報