0

在旧 iPhone 和旧三星 S4 上的网络浏览器中存在微妙的 javascript 问题。它在使用了 2 年的 Acer 手机上运行良好。试图查明问题,我将 JS 分成几个script块并alert在每个块中调用:

<script>
    // ...JS code...
    alert('JS0 end');
</script>
<script>
try{
    alert('JS1 start');
    // button handler to scan a barcode
    function scan_barcode() {
        $('#div_viewarea').show();
        $('#input_barcode').val('');// clear the barcode field
        log('scanning...');//clear message field
        // install the handler to process a barcode fount by quagga
        Quagga.onDetected(quagga_found_barcode);//callback stops Quagga
        // The Quagga config data for the LiveStream method accessing the camera directly
        var quagga_config_livestream = {
            inputStream: {
                //constraints: { width: 500, height: 500 },
                //area: { top: '50%', right: '50%', left: '50%', bottom: '50%' },
                target: document.querySelector('#div_viewarea'),
                name: "Live",
                type: "LiveStream"
            },
            quagga_decoders
        };
        // initialize/start/run the Quagga barcode module
        Quagga.init(quagga_config_livestream, quagga_on_init);
        return;
    }
    alert('JS1 end');
} 
catch(e){ 
    alert('exception 1: ' + e);
}
</script>
<script>
    // ...JS code...
    alert('JS2 end');
</script>

在 Acer 手机上,我得到了 JS0/1/2 的对话框,但在 iPhone 上只有 JS0+2,所以在我显示完整 JS 代码的中间脚本块中出现了问题。

在 Windows 上的 firefox 上运行该页面,F12 调试器显示没有问题。但是在手机浏览器上没有 F12 调试器。

我还尝试使用 获取 JS 异常try/catch,但没有为异常显示对话框。

所以我的问题是: - 中间脚本块有什么问题?- 如何在手机上调试 JS 代码?- 有没有比仅仅分成几个脚本块更好的方法?

顺便说一句,第二个代码块中的代码在旧手机上并不是很有趣,因为根据Quagga上的文档,旧手机不支持 MediaDevices API。但是如果我把所有的JS代码放在一个脚本块里,中间出问题的JS就根本跑不起来了。


更新:

我认为这是旧浏览器/设备中的错误。不过,它在三星 S4 上的 Firefox 中运行良好。我能够将问题隔离到变量的分配,quagga_config_livestream但发现既没有触发异常,也没有alert显示它的对话框,这非常令人惊讶。因为这个错误发生在一段与不支持 MediaDevices API 的旧设备无关的 JS 代码中,我只是将那几行 JS 沙箱化到它自己的script块中,并且不会费心安装新工具来远程调试它设备本身的代码。

4

0 回答 0