\r\nmain.jsを呼び出し、\r\nbodyタグ中でmain.js内の関数\r\nopenNote(){}\r\nを呼び出そうとしたのですが、\r\n\r\n \r\n\r\nでは、何か記述がおかしいのでしょうか?\r\n\r\nopenNote関数はグローバル関数にしていますが、なぜか呼び出しがされません。\r\n\r\nheadタグに直接javascriptを記述した場合、上記の呼び出しでしっかり呼び出してくれるんですが、外部からのjsの呼び出しと変わってくるのはなぜでしょうか?\r\n\r\n\r\n\r\n### 発生している問題・エラーメッセージ\r\n\r\n```\r\nエラーメッセージ\r\n```\r\n\r\n### 該当のソースコード\r\n\r\n\r\n\r\n\r\n \r\n \r\n NoteWeb-App\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n\r\n

Hello

\r\n
No-User
\r\n \r\n
\r\n \r\n\r\n\r\n\r\n\r\n------------------------------------------------------------------\r\nvar signinCompleted = false;\r\n\r\nfunction openNote() {\r\n console.log(\"open judge -> \"+signinCompleted)\r\n if (signinCompleted) {\r\n location.href = \"./note.html\";\r\n }else{\r\n console.log(\"Signin if you want to open note\");\r\n }\r\n}\r\n\r\nwindow.onload = function () {\r\n var loginButton = document.getElementById(\"login-button\");\r\n var username = this.document.getElementById(\"user-name\");\r\n\r\n loginButton.addEventListener(\"click\", event => {\r\n var provider = new firebase.auth.GoogleAuthProvider();\r\n this.console.log(\"aaa\");\r\n firebase.auth().signInWithPopup(provider).then(function (result) {\r\n console.log(\"func on\");\r\n signinCompleted = true;\r\n username.innerHTML = result.user.displayName;\r\n // This gives you a Google Access Token. You can use it to access the Google API.\r\n var token = result.credential.accessToken;\r\n // The signed-in user info.\r\n var user = result.user;\r\n })\r\n .catch(function (error) {\r\n console.log(error);\r\n // Handle Errors here.\r\n var errorCode = error.code;\r\n var errorMessage = error.message;\r\n // The email of the user's account used.\r\n var email = error.email;\r\n // The firebase.auth.AuthCredential type that was used.\r\n var credential = error.credential;\r\n // ...\r\n });\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n### 試したこと\r\n\r\nここに問題に対して試したことを記載してください。\r\n\r\n### 補足情報(FW/ツールのバージョンなど)\r\n別のjsファイルを作り、試したところ、普通に関数を呼び出すことができました。\r\nfirebaseのmain.jsが何か引っかかっているようです。\r\nmicrosoft edgeでは、main.jsでもできたのに対して、chromeでローカルサーバーで動かしてみると、上記のような事になるところまでは発見しましたが、それ以上はよく分かりません。","answerCount":2,"upvoteCount":1,"datePublished":"2019-12-30T10:04:59.520Z","dateModified":"2022-01-12T10:55:45.698Z","suggestedAnswer":[{"@type":"Answer","text":"[https://codepen.io/takuhito-h/pen/mdyByYa](https://codepen.io/takuhito-h/pen/mdyByYa)\r\n\r\n上記のコードをcodepenで実行してみましたが、openNoteは実行できてますね。\r\nやはりmain.jsの読み込みがうまくいっていないのでは?","dateModified":"2019-12-30T14:45:55.376Z","datePublished":"2019-12-30T14:45:55.376Z","upvoteCount":3,"url":"https://teratail.com/questions/232563#reply-339032","comment":[]},{"@type":"Answer","text":"main.jsがリードできてるかどうかは、main.jsのコードの先頭にalert()を書いて、ブラウザ表示した時に、アラートが表示されるかで判断できます。\r\n\r\n気になる点としては…\r\nsrcの値をダブルクォーテーションで囲んで試してみてください。\r\n\r\nsrc='main.js' → **src=\"main.js\"**\r\n\r\n以上","dateModified":"2019-12-30T14:45:18.256Z","datePublished":"2019-12-30T14:45:18.256Z","upvoteCount":1,"url":"https://teratail.com/questions/232563#reply-339031","comment":[]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/HTML5","name":"HTML5に関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/232563","name":"htmlからjavascript内の関数を呼び出す方法"}}]}}}
質問するログイン新規登録

Q&A

2回答

5324閲覧

htmlからjavascript内の関数を呼び出す方法

uma110

総合スコア4

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

1グッド

2クリップ

投稿2019/12/30 10:04

編集2019/12/30 18:46

1

2

前提・実現したいこと

html内のbody内からjavascript内の関数を呼び出したいのですが、

Uncaught ReferenceError: openNote is not defined
at HTMLInputElement.onclick (index.html:27)

というエラーメッセージが出てしまいます。

html内の
headタグの中で

<script type="text/javascript" src='main.js'></script>

main.jsを呼び出し、
bodyタグ中でmain.js内の関数
openNote(){}
を呼び出そうとしたのですが、

<input id="opennote-button" type="button" onclick="openNote()" value="Open Note">

では、何か記述がおかしいのでしょうか?

openNote関数はグローバル関数にしていますが、なぜか呼び出しがされません。

headタグに直接javascriptを記述した場合、上記の呼び出しでしっかり呼び出してくれるんですが、外部からのjsの呼び出しと変わってくるのはなぜでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>NoteWeb-App</title> <!-- call jquery frame --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <!-- update the version number as needed --> <script defer src="/__/firebase/7.6.0/firebase-app.js"></script> <!-- include only the Firebase features as you need --> <script defer src="/__/firebase/7.6.0/firebase-auth.js"></script> <script defer src="/__/firebase/7.6.0/firebase-database.js"></script> <script defer src="/__/firebase/7.6.0/firebase-messaging.js"></script> <script defer src="/__/firebase/7.6.0/firebase-storage.js"></script> <!-- initialize the SDK after all desired features are loaded --> <script defer src="/__/firebase/init.js"></script> <script type="text/javascript" src='main.js'></script> </head> <body> <h1>Hello</h1> <div id="user-name">No-User</div> <input id="login-button" type="image" src="UI/signinImage.png" alt="LOGIN"> <br> <input id="opennote-button" type="button" onclick="openNote()" value="Open Note"> </body> </html>

var signinCompleted = false;

function openNote() {
console.log("open judge -> "+signinCompleted)
if (signinCompleted) {
location.href = "./note.html";
}else{
console.log("Signin if you want to open note");
}
}

window.onload = function () {
var loginButton = document.getElementById("login-button");
var username = this.document.getElementById("user-name");

loginButton.addEventListener("click", event => {
var provider = new firebase.auth.GoogleAuthProvider();
this.console.log("aaa");
firebase.auth().signInWithPopup(provider).then(function (result) {
console.log("func on");
signinCompleted = true;
username.innerHTML = result.user.displayName;
// This gives you a Google Access Token. You can use it to access the Google API.
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
})
.catch(function (error) {
console.log(error);
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
// ...
});
});
};

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

別のjsファイルを作り、試したところ、普通に関数を呼び出すことができました。
firebaseのmain.jsが何か引っかかっているようです。
microsoft edgeでは、main.jsでもできたのに対して、chromeでローカルサーバーで動かしてみると、上記のような事になるところまでは発見しましたが、それ以上はよく分かりません。

DrqYuto👍を押しています

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

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

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

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

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

javahack

2019/12/30 10:10

main.jsが正しく読み込まれていることは確認しましたか?
uma110

2019/12/30 11:15 編集

同スクリプトにて、googleのfireframeにてauth認証のスクリプトも入れてますが、それはできているので、読み込みはできているはずです。
takuhito_hihara

2019/12/30 12:57

これだけでは回答が難しいので具体的なHTML、CSSを提示していただけると助かります。
uma110

2019/12/30 13:20

htmlとjavascriptを書きました。 cssは使っていません。 お願いします><
kei344

2019/12/30 13:38

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答2

0

https://codepen.io/takuhito-h/pen/mdyByYa

上記のコードをcodepenで実行してみましたが、openNoteは実行できてますね。
やはりmain.jsの読み込みがうまくいっていないのでは?

投稿2019/12/30 14:45

takuhito_hihara

総合スコア142

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

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

0

main.jsがリードできてるかどうかは、main.jsのコードの先頭にalert()を書いて、ブラウザ表示した時に、アラートが表示されるかで判断できます。

気になる点としては…
srcの値をダブルクォーテーションで囲んで試してみてください。

src='main.js' → src="main.js"

以上

投稿2019/12/30 14:45

KazuSaka

総合スコア640

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問