Javascript 在 inappbrowser 中的行为与 Chrome 不同 - 未定义的全局变量
Javascript acting differently in inappbrowser vs Chrome - Undefined global variables
我的问题是,当我使用 inappbrowser 打开我的网页时,主 javascript 文件似乎被忽略了,即使它在我使用 [= 打开的文件的头部被引用也是如此14=]
我正在使用 chrome://inspect/#devices
检查控制台,但在按下按钮时出现错误。main.js 文件中引用的任何内容均未定义。而自动完成和按钮的实际代码似乎正在执行。
请注意 url 在 chrome 浏览器中查看时工作正常。 javascript 文件似乎可以正确加载,并且所有变量都已正确定义。 - 只有当我使用 inappbrowser 时,我才会看到未定义变量的问题。
我的代码(cordova 应用程序):
ref = cordova.InAppBrowser.open('https://MYURLHERE:8484/home/login', '_self', 'location=yes');
var myInAppBrowserCallback = function(event) {
console.log(event.url, 'LOADED');
};
ref.addEventListener('loadstart', myInAppBrowserCallback);
//Works fine.
我的代码(来自我试图在 Inappbrowser 中查看的实际网站):
<script src="/Scripts/commonFunctions.js"></script>
var p = 'Hello';
<script src="/Scripts/loginPage.js"></script>
$('#btnLogin').on('click', function() {
alert(p);
});
Returns 未定义的警报。
我尝试过的:
- 大量谷歌搜索! (所有答案似乎都与 javascript 未启用有关......或 404 错误或类似的事情......不是来自一个 js 文件的全局变量在另一个 js 文件中未定义。)
- 正在删除 inappbrowser,使用 window.open.. 将不起作用,因为该应用需要执行脚本来检查站点的本地存储。
- 正在使用 cordova 重新安装 android 平台。
- 正在重新安装插件。
- 在检查器中检查 chrome 以确保文件在源选项卡中(它们是)。
- 检查 main.js 中的函数是否也存在(它们确实存在)。
谢谢,JFIT
总结:
问题是 javascript 文件试图加载“SpeechSynthesis”,它仅在 inappbrowser 中未定义。
详情:
这个问题令人困惑,但这是我发现的调试/解决步骤:
在 phone 上设置远程调试,以便您可以使用 chrome://inspect/#devices[= 查看 phone 的控制台10=]
查看 inappbrowser 站点的控制台(它将显示为 inappbrowser 实例的单独页面。
识别正在加载的文件并删除文件,直到 'undefined' 错误消失。
在最近的文件里加回来,开始剥离各种函数(尤其是functions/variables之前的document.ready(还有全局变量)
那样找到line/variable。这种方式对我来说很方便,因为在我删除了大部分文件后实际未定义的变量出现了。
我的错误的实际原因是 speechSynthesis 功能。
删除了 speechsynthesis 行,我重新添加了所有剩余的文件,一切正常。此功能在 desktop/android 上的 chrome 中运行良好,但在 inappbrowser 中运行不正常。
我的问题是,当我使用 inappbrowser 打开我的网页时,主 javascript 文件似乎被忽略了,即使它在我使用 [= 打开的文件的头部被引用也是如此14=]
我正在使用 chrome://inspect/#devices
检查控制台,但在按下按钮时出现错误。main.js 文件中引用的任何内容均未定义。而自动完成和按钮的实际代码似乎正在执行。
请注意 url 在 chrome 浏览器中查看时工作正常。 javascript 文件似乎可以正确加载,并且所有变量都已正确定义。 - 只有当我使用 inappbrowser 时,我才会看到未定义变量的问题。
我的代码(cordova 应用程序):
ref = cordova.InAppBrowser.open('https://MYURLHERE:8484/home/login', '_self', 'location=yes');
var myInAppBrowserCallback = function(event) {
console.log(event.url, 'LOADED');
};
ref.addEventListener('loadstart', myInAppBrowserCallback);
//Works fine.
我的代码(来自我试图在 Inappbrowser 中查看的实际网站):
<script src="/Scripts/commonFunctions.js"></script>
var p = 'Hello';
<script src="/Scripts/loginPage.js"></script>
$('#btnLogin').on('click', function() {
alert(p);
});
Returns 未定义的警报。
我尝试过的:
- 大量谷歌搜索! (所有答案似乎都与 javascript 未启用有关......或 404 错误或类似的事情......不是来自一个 js 文件的全局变量在另一个 js 文件中未定义。)
- 正在删除 inappbrowser,使用 window.open.. 将不起作用,因为该应用需要执行脚本来检查站点的本地存储。
- 正在使用 cordova 重新安装 android 平台。
- 正在重新安装插件。
- 在检查器中检查 chrome 以确保文件在源选项卡中(它们是)。
- 检查 main.js 中的函数是否也存在(它们确实存在)。
谢谢,JFIT
总结: 问题是 javascript 文件试图加载“SpeechSynthesis”,它仅在 inappbrowser 中未定义。
详情:
这个问题令人困惑,但这是我发现的调试/解决步骤:
在 phone 上设置远程调试,以便您可以使用 chrome://inspect/#devices[= 查看 phone 的控制台10=]
查看 inappbrowser 站点的控制台(它将显示为 inappbrowser 实例的单独页面。
识别正在加载的文件并删除文件,直到 'undefined' 错误消失。
在最近的文件里加回来,开始剥离各种函数(尤其是functions/variables之前的document.ready(还有全局变量)
那样找到line/variable。这种方式对我来说很方便,因为在我删除了大部分文件后实际未定义的变量出现了。
我的错误的实际原因是 speechSynthesis 功能。
删除了 speechsynthesis 行,我重新添加了所有剩余的文件,一切正常。此功能在 desktop/android 上的 chrome 中运行良好,但在 inappbrowser 中运行不正常。