在较旧的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,并且不用担心安装新工具以在设备上远程调试此代码。