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

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

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

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2512閲覧

HTMLからJavascriptを呼び出す方法

takeshi1907

総合スコア54

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/07/11 01:43

編集2018/07/11 01:56

以下のように App.js の中の test 関数を index.htmlから実行したく思っていますが、「Uncaught ReferenceError: App is not defined」 というエラーが出て呼び出すことができません。
呼び出しは 「パターン1」 と 「パターン2」 の方法で試しました。
「パターン1」 の場合は return App; → return new App(); も試しました。

過去に似たような質問をしたのですが、同じ、App.js 内での test 関数の呼び出しは成功しました。
今回は HTML ファイルから呼び出せない状況となっています。

よろしくお願い致します。

▼ index.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="../static/js/app.js"></script> </head> <body> <script type="txt/javascript"> // パターン1 // Uncaught ReferenceError: App is not defined エラー App.test(); // パターン2 // Uncaught ReferenceError: App is not defined エラー var a = new App.test(); a.test(); </script> </body> </html>

▼ App.js

App.js

1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2"use strict"; 3var module1_1 = require("./module1"); 4var module2_1 = require("./module2"); 5var App = /** @class */ (function () { 6 function App() { 7 } 8 App.init = function () { 9 alert(module2_1["default"]()); 10 }; 11 App.test = function () { 12 var a = new module1_1.module1(); 13 alert(a.module1()); 14 }; 15 return App; 16})(); 17module.exports = App; 18 19},{"./module1":2,"./module2":3}],2:[function(require,module,exports){ 20"use strict"; 21exports.__esModule = true; 22var module1 = /** @class */ (function () { 23 function module1() { 24 } 25 module1.prototype.module1 = function () { 26 return "module1"; 27 }; 28 return module1; 29}()); 30exports.module1 = module1; 31 32},{}],3:[function(require,module,exports){ 33"use strict"; 34exports.__esModule = true; 35function default_1() { 36 return "module2"; 37} 38exports["default"] = default_1; 39 40},{}]},{},[1]);

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

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

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

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

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

guest

回答1

0

ベストアンサー

App クラスは即時関数のスコープに閉じられているのでアクセスできません。
Window オブジェクトにぶら下げさえすればアクセス出来そうですが。


ビルドツールに Webpack を使用していれば設定次第でグローバルに定義出来そうですね。

javascript - Webpack: export to existing module in window - Stack Overflow
output.libraryTarget

投稿2018/07/11 02:17

編集2018/07/11 03:00
og24715

総合スコア832

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

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

takeshi1907

2018/07/11 02:52 編集

ありがとうございます。App.js は以下のtypescriptをコンパイルしたのですが、即時関数のスコープに入れないで外部からもアクセス出来る様にするのは、typescriptの方はどのような書き方にすれば良いでしょうか。 "use strict"; import { module1 } from "./module1"; import module2 from "./module2"; class App{ public static init() { alert(module2()); } public static test(){ var a = new module1(); alert(a.module1()); } } export = App;
og24715

2018/07/11 02:47

何を使用しているか知りませんがお使いのビルドツールの設定によるんじゃないですか? webpack なら グローバルに定義する設定があった気がします。モジュールバンドラーも使用しているように見えますが、わざわざビルドされた js に対して html に埋め込まれた js でアクセスするのはちょっと謎ですね。
takeshi1907

2018/07/11 02:52

ご丁寧に、ありがとうございます。まだ、勉強中で何が良いのかわからず、試行錯誤している状態です。 色々と試してみますmm
takeshi1907

2018/07/11 04:32

>ビルドツールに Webpack を使用していれば設定次第でグローバルに定義出来そうですね。 ありがとうございます。因みにビルドツールはGulpを使用しています。 var gulp = require('gulp'); var browserify = require('browserify'); var source = require('vinyl-source-stream'); gulp.task('build-ts', function () { return browserify({ entries: './src/ts/app.ts' }).plugin('tsify') .bundle() .pipe(source('app.js')) .pipe(gulp.dest('./static/js')); });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問