質問編集履歴

2

文章の修正

2017/07/28 09:03

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -28,7 +28,9 @@
28
28
 
29
29
  ###補足情報(言語/FW/ツール等のバージョンなど)
30
30
 
31
+ PHPとJavascriptにて実際にプログラムを書き、
32
+
31
- Javascriptの関数"upload"を複数回(一回~数十回)実行すると、エラーメッセージが表示されて撮影した画像が消えてしまいます。
33
+ PHPで記述されたHTMLページのボタンからJavascriptの関数"upload"を複数回(一回~数十回)実行すると、エラーメッセージが表示されて撮影した画像が消えてしまいます。
32
34
 
33
35
  問題が発生するタイミングは不定期で規則性はありません。
34
36
 

1

質問書式の改善

2017/07/28 09:03

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 「問題が起きたため、このWebページを再度読み込みました。」と表示されページの再読み込みが発生する
1
+ iOSのカメラアプリで撮影を行うとSafari上で「問題が起きたため、このWebページを再度読み込みました。」と表示されて、ページの再読み込みが発生し撮影した画像が消えてしまう
test CHANGED
@@ -18,6 +18,28 @@
18
18
 
19
19
 
20
20
 
21
+ ###試したこと
22
+
23
+ [1]該当ページを画像を10枚撮影するごとに再読み込み
24
+
25
+ [2]iPadを半日使用したら再起動
26
+
27
+
28
+
29
+ ###補足情報(言語/FW/ツール等のバージョンなど)
30
+
31
+ Javascriptの関数"upload"を複数回(一回~数十回)実行すると、エラーメッセージが表示されて撮影した画像が消えてしまいます。
32
+
33
+ 問題が発生するタイミングは不定期で規則性はありません。
34
+
35
+ 一回撮影しただけで発生することもありますし、何十回撮影しても発生しないこともあります。
36
+
37
+
38
+
39
+ 問題が発生する箇所は決まって、input fileボタンを押しカメラアプリが起動してシャッターを押した直後です。
40
+
41
+
42
+
21
43
  ###読み込み元ソース
22
44
 
23
45
  ```PHP
@@ -288,21 +310,9 @@
288
310
 
289
311
  // 枠内に送信状況を表示
290
312
 
291
- var sending = {
313
+
292
-
293
- frameStatus: '送信中',
314
+
294
-
295
- addClass: 'line_status_sending',
315
+ //POST送信を行う途中であることをユーザーに通知
296
-
297
- removeClass: 'line_status_done line_status_fail',
298
-
299
- b: b,
300
-
301
- showResend: 'none'
302
-
303
- };
304
-
305
- changeImageStatus(sending);
306
316
 
307
317
 
308
318
 
@@ -406,7 +416,7 @@
406
416
 
407
417
 
408
418
 
409
- // S3への画像登録成功時
419
+ // POST送信成功時
410
420
 
411
421
  if(data['is_success'] == true) {
412
422
 
@@ -430,43 +440,17 @@
430
440
 
431
441
  // 枠内に送信状況を表示
432
442
 
433
- var sendSuccess = {
443
+
434
-
435
- frameStatus: '送信成功',
444
+
436
-
437
- addClass: 'line_status_done',
445
+ //POST送信に成功したことをユーザーに通知
438
-
439
- removeClass: 'line_status_sending',
440
-
441
- b: b,
442
-
443
- showResend: 'none'
444
-
445
- };
446
-
447
- changeImageStatus(sendSuccess);
448
446
 
449
447
 
450
448
 
451
- // S3への画像登録失敗時
449
+ // POST送信失敗時
452
450
 
453
451
  } else {
454
452
 
455
- var sendFailure = {
456
-
457
- frameStatus: '登録失敗',
458
-
459
- addClass: 'line_status_fail',
453
+ //POST送信に失敗したことをユーザーに通知
460
-
461
- removeClass: 'line_status_sending',
462
-
463
- b: b,
464
-
465
- showResend: 'inline'
466
-
467
- };
468
-
469
- changeImageStatus(sendFailure);
470
454
 
471
455
  }
472
456
 
@@ -480,298 +464,262 @@
480
464
 
481
465
  }).fail(function(jqXHR, textStatus, errorThrown) {
482
466
 
483
- var sendFailure = {
484
-
485
- frameStatus: '登録失敗',
486
-
487
- addClass: 'line_status_fail',
467
+ //POST送信に失敗したことをユーザーに通知
488
-
489
- removeClass: 'line_status_sending',
468
+
490
-
491
- b: b,
469
+
492
-
493
- showResend: 'inline'
494
-
495
- };
496
-
497
- changeImageStatus(sendFailure);
498
470
 
499
471
  // 送信ボタンを有効化
500
472
 
501
- changeButtonStatus(true, b);
473
+ changeButtonStatus(true, b);
474
+
475
+ });
476
+
477
+ }
478
+
479
+
480
+
481
+ // 撮影画像データ読み込み成功時のイベントハンドラ
482
+
483
+ reader.onload = function(e) {
484
+
485
+ console.log("reader complete");
486
+
487
+ // src属性取得
488
+
489
+ imgSrc = e.target.result;
502
490
 
503
491
 
504
492
 
493
+ // *****, *****を分解
494
+
495
+ photoParam = e.target.name.split(",");
496
+
497
+
498
+
499
+ //回転情報を取得
500
+
501
+ ori = getOrientation(imgSrc);
502
+
503
+ // src属性にURLを設定。設定すると即座に非同期のリクエストが飛ぶ
504
+
505
- });
505
+ img.src = imgSrc;
506
506
 
507
507
  }
508
508
 
509
509
 
510
510
 
511
- // 撮影画像データ読み込み成功時のイベントハンドラ
511
+ // 画像ファイルをDataURLとして読み込み
512
+
512
-
513
+ reader.readAsDataURL($("#pictures" + b)[0].files[0]);
514
+
515
+ }
516
+
517
+
518
+
519
+ /**
520
+
521
+ * 画像の送信状況(枠色、メッセージ)を表示し、
522
+
523
+ * @param
524
+
525
+ * stauts: {
526
+
527
+ * frameStatus: 送信状況のメッセージ
528
+
529
+ * addClass: 表示したい送信状況のクラス名
530
+
531
+ * removeClass: 削除したい送信状況のクラス名(複数の場合はスペースで区切る)
532
+
533
+ * b: 画像番号
534
+
535
+ * showResend: 再送信ボタン表示・非表示
536
+
537
+ * }
538
+
539
+ */
540
+
513
- reader.onload = function(e) {
541
+ function changeImageStatus(status) {
542
+
514
-
543
+ with(status) {
544
+
545
+ // 枠内に送信状況のメッセージを表示
546
+
547
+ $("#status_pictures" + b).html(frameStatus);
548
+
549
+ // 表示したい送信状況のクラス
550
+
551
+ $("#line_status_pictures" + b).addClass(addClass);
552
+
553
+ // 削除したい送信状況のクラス
554
+
555
+ $("#line_status_pictures" + b).removeClass(removeClass);
556
+
557
+ // 再送信ボタンの表示・非表示設定
558
+
515
- console.log("reader complete");
559
+ $("#resend" + b).css("display", showResend);
560
+
516
-
561
+ }
562
+
563
+ }
564
+
565
+
566
+
567
+ /**
568
+
569
+ * 「ファイルを選択」ボタン、再送信ボタンの表示・非表示を変更する
570
+
571
+ * @param
572
+
573
+ * showFlag: 表示フラグ
574
+
575
+ * true: 表示、false: 非表示
576
+
577
+ * b: 画像番号
578
+
579
+ */
580
+
581
+ function changeButtonStatus(showFlag, b) {
582
+
583
+ // 「ファイルを選択」ボタ
584
+
585
+ $("#pictures" + b).prop("disabled", !showFlag);
586
+
517
- // src属性取得
587
+ // 再送信ボタン
588
+
518
-
589
+ $("#resend" + b).prop("disabled", !showFlag);
590
+
591
+ }
592
+
593
+
594
+
595
+ /**
596
+
597
+ * 縦横比を判断して縮小
598
+
599
+ * @param
600
+
601
+ * image: Imageオブジェクト
602
+
603
+ * base64length: データサイズ
604
+
605
+ * width: 画像サイズ(幅)
606
+
607
+ * height: 画像サイズ(高さ)
608
+
609
+ * orientation: 画像回転情報
610
+
611
+ */
612
+
613
+ function scaleDownImage(image, base64length , width, height, orientation) {
614
+
615
+ //回転情報が含まれていない
616
+
617
+ if(orientation==undefined){
618
+
519
- imgSrc = e.target.result;
619
+ console.log("PC");
620
+
621
+
622
+
623
+ //高さより幅が大きい画像
624
+
625
+ if(height < width ){
626
+
627
+ var scaleWidth = 960;
628
+
629
+ var scaleHeight = 960 / width * height;
630
+
631
+ }
632
+
633
+ //幅より高さが大きい画像
634
+
635
+ else {
636
+
637
+ var scaleWidth = 960;
638
+
639
+ var scaleHeight = 960 / height * width;
640
+
641
+ }
642
+
643
+ }
644
+
645
+ //回転情報が含まれている
646
+
647
+ else {
648
+
649
+ console.log("iPad");
520
650
 
521
651
 
522
652
 
523
- // *****, *****を分解
653
+ //高さより幅が大きい画像
654
+
524
-
655
+ if(height < width ){
656
+
657
+ var scaleWidth = 960;
658
+
659
+ var scaleHeight = 960 / width * height;
660
+
661
+ }
662
+
663
+ //幅より高さが大きい画像
664
+
665
+ else {
666
+
667
+ var scaleWidth = 960 / height * width;
668
+
669
+ var scaleHeight = 960;
670
+
671
+ }
672
+
673
+ }
674
+
675
+
676
+
677
+ if(1398101 < base64length) {
678
+
679
+ //canvas生成
680
+
681
+ var canvas = $('<canvas></canvas>');
682
+
525
- photoParam = e.target.name.split(",");
683
+ var context = canvas[0].getContext('2d');
684
+
685
+ canvas[0].width = Math.floor(scaleWidth);
686
+
687
+ canvas[0].height = Math.floor(scaleHeight);
526
688
 
527
689
 
528
690
 
529
- //回転情報を取得
691
+ //画像縮小
530
-
692
+
531
- ori = getOrientation(imgSrc);
693
+ context.drawImage(image, 0, 0, image.width, image.height, 0, 0, scaleWidth, scaleHeight);
532
-
533
- // src属性にURLを設定。設定すると即座に非同期のリクエストが飛ぶ
534
-
535
- img.src = imgSrc;
536
694
 
537
695
  }
538
696
 
539
-
697
+ else {
540
-
698
+
541
- // 画像ファイルをDataURLとして読み込み
699
+ //canvas生成
542
-
700
+
543
- reader.readAsDataURL($("#pictures" + b)[0].files[0]);
701
+ var canvas = $('<canvas></canvas>');
702
+
703
+ var context = canvas[0].getContext('2d');
704
+
705
+ canvas[0].width = image.width;
706
+
707
+ canvas[0].height = image.height;
708
+
709
+
710
+
711
+ //画像縮小
712
+
713
+ context.drawImage(image, 0, 0, image.width, image.height, 0, 0, image.width, image.height);
714
+
715
+ }
716
+
717
+
718
+
719
+ return canvas[0].toDataURL();
544
720
 
545
721
  }
546
722
 
547
723
 
548
724
 
549
- /**
550
-
551
- * 画像の送信状況(枠色、メッセージ)を表示し、
552
-
553
- * @param
554
-
555
- * stauts: {
556
-
557
- * frameStatus: 送信状況のメッセージ
558
-
559
- * addClass: 表示したい送信状況のクラス名
560
-
561
- * removeClass: 削除したい送信状況のクラス名(複数の場合はスペースで区切る)
562
-
563
- * b: 画像番号
564
-
565
- * showResend: 再送信ボタン表示・非表示
566
-
567
- * }
568
-
569
- */
570
-
571
- function changeImageStatus(status) {
572
-
573
- with(status) {
574
-
575
- // 枠内に送信状況のメッセージを表示
576
-
577
- $("#status_pictures" + b).html(frameStatus);
578
-
579
- // 表示したい送信状況のクラス
580
-
581
- $("#line_status_pictures" + b).addClass(addClass);
582
-
583
- // 削除したい送信状況のクラス
584
-
585
- $("#line_status_pictures" + b).removeClass(removeClass);
586
-
587
- // 再送信ボタンの表示・非表示設定
588
-
589
- $("#resend" + b).css("display", showResend);
590
-
591
- }
592
-
593
- }
594
-
595
-
596
-
597
- /**
598
-
599
- * 「ファイルを選択」ボタン、再送信ボタンの表示・非表示を変更する
600
-
601
- * @param
602
-
603
- * showFlag: 表示フラグ
604
-
605
- * true: 表示、false: 非表示
606
-
607
- * b: 画像番号
608
-
609
- */
610
-
611
- function changeButtonStatus(showFlag, b) {
612
-
613
- // 「ファイルを選択」ボタ
614
-
615
- $("#pictures" + b).prop("disabled", !showFlag);
616
-
617
- // 再送信ボタン
618
-
619
- $("#resend" + b).prop("disabled", !showFlag);
620
-
621
- }
622
-
623
-
624
-
625
- /**
626
-
627
- * 縦横比を判断して縮小
628
-
629
- * @param
630
-
631
- * image: Imageオブジェクト
632
-
633
- * base64length: データサイズ
634
-
635
- * width: 画像サイズ(幅)
636
-
637
- * height: 画像サイズ(高さ)
638
-
639
- * orientation: 画像回転情報
640
-
641
- */
642
-
643
- function scaleDownImage(image, base64length , width, height, orientation) {
644
-
645
- //回転情報が含まれていない
646
-
647
- if(orientation==undefined){
648
-
649
- console.log("PC");
650
-
651
-
652
-
653
- //高さより幅が大きい画像
654
-
655
- if(height < width ){
656
-
657
- var scaleWidth = 960;
658
-
659
- var scaleHeight = 960 / width * height;
660
-
661
- }
662
-
663
- //幅より高さが大きい画像
664
-
665
- else {
666
-
667
- var scaleWidth = 960;
668
-
669
- var scaleHeight = 960 / height * width;
670
-
671
- }
672
-
673
- }
674
-
675
- //回転情報が含まれている
676
-
677
- else {
678
-
679
- console.log("iPad");
680
-
681
-
682
-
683
- //高さより幅が大きい画像
684
-
685
- if(height < width ){
686
-
687
- var scaleWidth = 960;
688
-
689
- var scaleHeight = 960 / width * height;
690
-
691
- }
692
-
693
- //幅より高さが大きい画像
694
-
695
- else {
696
-
697
- var scaleWidth = 960 / height * width;
698
-
699
- var scaleHeight = 960;
700
-
701
- }
702
-
703
- }
704
-
705
-
706
-
707
- if(1398101 < base64length) {
708
-
709
- //canvas生成
710
-
711
- var canvas = $('<canvas></canvas>');
712
-
713
- var context = canvas[0].getContext('2d');
714
-
715
- canvas[0].width = Math.floor(scaleWidth);
716
-
717
- canvas[0].height = Math.floor(scaleHeight);
718
-
719
-
720
-
721
- //画像縮小
722
-
723
- context.drawImage(image, 0, 0, image.width, image.height, 0, 0, scaleWidth, scaleHeight);
724
-
725
- }
726
-
727
- else {
728
-
729
- //canvas生成
730
-
731
- var canvas = $('<canvas></canvas>');
732
-
733
- var context = canvas[0].getContext('2d');
734
-
735
- canvas[0].width = image.width;
736
-
737
- canvas[0].height = image.height;
738
-
739
-
740
-
741
- //画像縮小
742
-
743
- context.drawImage(image, 0, 0, image.width, image.height, 0, 0, image.width, image.height);
744
-
745
- }
746
-
747
-
748
-
749
- return canvas[0].toDataURL();
750
-
751
- }
752
-
753
-
754
-
755
725
  ```
756
-
757
-
758
-
759
- ###試したこと
760
-
761
- [1]該当ページを定期的に再読み込み
762
-
763
- [2]iPadを定期的に再起動
764
-
765
-
766
-
767
- ###補足情報(言語/FW/ツール等のバージョンなど)
768
-
769
- Javascriptの関数"upload"を複数回(1回~)実行すると、エラーメッセージが表示されてしまいます。
770
-
771
- 問題が発生するタイミングは不定期で規則性はありません。
772
-
773
- 1回実行した際に発生することもありますし、何十回実行しても発生しないこともあります。
774
-
775
-
776
-
777
- 問題が発生する箇所は決まっており、input fileボタンを押しカメラアプリが起動してシャッターを押した直後です。