Javascript 未捕获引用错误:函数已定义时未定义函数
我有一个已定义但不在DOM中工作的函数。 我正在处理2个文件。比如说,A.js和B.js 在A.js中,我有一些如下代码Javascript 未捕获引用错误:函数已定义时未定义函数,javascript,html,Javascript,Html,我有一个已定义但不在DOM中工作的函数。 我正在处理2个文件。比如说,A.js和B.js 在A.js中,我有一些如下代码 (function() { var initData = { version: "1.0.0", host: "xyz.com", page_id: "someDynamicID", }; function initVarData(initData) { if (!window.ABCD)
(function() {
var initData = {
version: "1.0.0",
host: "xyz.com",
page_id: "someDynamicID",
};
function initVarData(initData) {
if (!window.ABCD) {
window.ABCD = initData;
}
}
initVarData(initData);
})();
(function(d, id) {
function appendToBody(d, el) {
if (d.head) {
d.head.appendChild(el);
} else {
setTimeout(appendToBody.bind(null, d, el), 500);
}
}
if (d.getElementById(id)) {
window.ABCD && ABCD.widgets.parse();
return;
}
var js = d.createElement("script");
js.id = id;
js.async = true;
js.src = "https://myserver.com/js/B.js";
appendToBody(d, js);
})(document, "test");
在A.js中,我定义了一些动态数据(这个A.js脚本实际上是从后端加载的)。然后A.js调用B.js加载到DOM中
在B.js中,我有如下代码
(function(window, document) {
window.bng = function(buttonID) {
var button = document.getElementById(buttonID);
if (button) {
button.addEventListener(
"click",
function() {
alert("This alert is from B.js");
},
false
);
}
};
})(window, document);
此函数在控制台中更新,但在DOM中不更新
在html中,我调用了A.js并使用bng(“buttonId”)。但是我得到了错误uncaughtreferenceerror:bng没有定义
我已经用计算机解决了这个问题
window.addEventListener('load', function() {
bng("buttonId");
});
但是我想不使用onLoad函数。Facebook在他们的SDK中使用了类似fbq的功能。我认为,如果您让scriptB.js先加载(阻止脚本),问题应该得到解决 注释掉A.js中尝试加载B.js的行
// var js = d.createElement("script");
// js.id = id;
// js.async = true;
// js.src = "https://myserver.com/js/B.js";
// appendToBody(d, js);
并按如下所示编辑HTML
<head>
<title>JS Tests</title>
<script type="text/javascript" src="src/B.js"></script>
<script type="text/javascript" src="src/A.js"></script>
</head>
JS测试
您可以尝试下面的代码片段,看看它是否有效
JS测试
点击我
bng(“btn_测试”);
我认为,如果让scriptB.js先加载(阻塞脚本),问题应该得到解决
注释掉A.js中尝试加载B.js的行
// var js = d.createElement("script");
// js.id = id;
// js.async = true;
// js.src = "https://myserver.com/js/B.js";
// appendToBody(d, js);
并按如下所示编辑HTML
<head>
<title>JS Tests</title>
<script type="text/javascript" src="src/B.js"></script>
<script type="text/javascript" src="src/A.js"></script>
</head>
JS测试
您可以尝试下面的代码片段,看看它是否有效
JS测试
点击我
bng(“btn_测试”);