如何在iphone

时间:2018-03-12 16:35:08

标签: javascript mobile quaggajs

在较旧的iPhone上以及较旧的Samsung S4上的Web浏览器中存在微妙的javascript问题。它在2年前的Acer手机上运行得很好。试图找出问题我在几个script块中拆分JS并在每个块中放入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调试器。

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

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

顺便提一下,第二个块中的代码在旧手机上并不是很有趣,因为根据Quagga上的文档,旧手机不支持MediaDevices API。但是,如果我将所有JS代码放在一个脚本块中,那么JS中间的问题就不会运行了。

更新

我认为这是旧浏览器/设备中的错误。但它在三星S4上的Firefox中运行正常。我能够将问题与变量quagga_config_livestream的赋值隔离开来,但是发现非常令人惊讶的是既没有触发异常,也没有早期的alert显示其对话框。因为这个错误发生在与不支持MediaDevices API的旧设备无关的JS代码中,所以我只是在自己的script块中沙箱化了几行JS,并且不用担心安装新工具以在设备上远程调试此代码。

0 个答案:

没有答案