#javascript #html
#javascript #HTML
Вопрос:
Я пытаюсь написать веб-сайт, но когда я пытаюсь вызвать функцию JavaScript, определенную в другом файле из моего HTML-кода, я получаю следующую ошибку
Неперехваченная ошибка ссылки: fetchConfs не определена в admin.html:46
Я импортировал скрипт в <head>
часть HTML, но по какой-то причине я все еще получаю сообщение об ошибке.
admin.html:
<!DOCTYPE html>
<head>
<link rel="stylesheet" href="bundle.css">
<script type="text/javascript" src="bundle.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.9.3/firebase-firestore.js"></script>
<title>Dilo </title>
</head>
<header class="header">
<img src="logo.png">
<p>Sobreviviendo a lo imposible</p>
</header>
<body>
<script type="text/javascript">
var firebaseConfig = {
apiKey: "",
authDomain: "dilo-mas.firebaseapp.com",
databaseURL: "https://dilo-mas.firebaseio.com",
projectId: "dilo-mas",
storageBucket: "",
messagingSenderId: ""
};
firebase.initializeApp(firebaseConfig);
initApp = function () {
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
var email = user.email;
user.getIdToken().then(function (accessToken) {
document.getElementById("greeter").textContent = "Hola " email;
});
} else {
window.location.href = '/login.html'
}
}, function (error) {
console.log(error);
});
};
window.addEventListener('load', function () {
initApp()
document.getElementById("logout").onclick = function logout() {
firebase.auth().signOut().then(function () { window.location.href = '/login.html' });
}
var confs = fetchConfs();
});
</script>
<h1 id="greeter">Error, inicia sesión para continuar</h1>
<button class="mdc-button foo-button" id="logout" style="float: right;">
Cerrar Sesión
</button>
</body>
</html>
app.js (Этот файл скомпилирован для bundle.js использование веб-пакетов перед развертыванием):
import {MDCRipple} from '@material/ripple/index';
import { MDCTextField } from '@material/textfield';
import * as firebase from 'firebase/app';
import 'firebase/firestore';
import 'firebase/firebase-auth';
const ripple = new MDCRipple(document.querySelector('.foo-button'));
var firebaseConfig = {
apiKey: "",
authDomain: "dilo-mas.firebaseapp.com",
databaseURL: "https://dilo-mas.firebaseio.com",
projectId: "dilo-mas",
storageBucket: "",
messagingSenderId: ""
};
firebase.initializeApp(firebaseConfig);
document.getElementById("tbut").onclick = function submitForm() {
var date = Date.now().toString()
var x = document.getElementById("conf").value;
firebase.firestore().collection("confesiones").doc(date).set({
conf: x
})
.then(function () {
console.log("Document successfully written!");
var y = document.getElementById("conf").value;
console.log("input " x)
alert("Exito");
})
.catch(function (error) {
console.error("Error writing document: ", error);
alert("Error envíando tu confesión")
});
document.getElementById("conf").reset();
}
function fetchConfs() {
var confs = db.collection("confesiones").where(firebase.firestore.FieldPath.documentId(), "!=", "root").get();
return confs;
}
Я уже пытался присвоить fetchConfs()
объекту window или глобальной переменной, но я все еще получаю ту же ошибку.
Примечание: я использую webpacks и другие плагины npm для компиляции кода js и sass в статические файлы для развертывания.
Комментарии:
1. Просто назначить
fetchConfs
window
?2. из того, что я мало знаю о webpack, компиляторах и т. Д., Я знаю, что встроенный файл в JS часто не поддерживает схему именования. Таким образом, это может быть определено в вашем коде, но webpack может экспортировать его как
_fetchConfs
или что-то в этом роде. Возможно, посмотрите на скомпилированный вывод и посмотрите, что вы можете найти. если это все еще не работает, то вы можете попробовать назначить функцию объекту window .
Ответ №1:
Скрипты выполняются в том порядке, в котором они перечислены <head>
, затем любые в теле. Если функция находится в скрипте, указанном ниже, эта функция может быть еще не определена при ее запуске.
Чтобы исправить это, определите fetchConfs
ранее.
Комментарии:
1. Скрипт импортируется до вызова функции. Скрипт является первым, перечисленным в заголовке, функция вызывается в теле