2014-10-30 3 views
0

페이지가 HTML5-jQuery입니다. 모바일 사파리와 Chrome에서 잘 작동합니다. 그러나 전체 화면으로 열면 정말 이상하게 작동합니다. 웹 서비스를 통해 업데이트 된 텍스트를 보내고 성공/실패 응답을받는 '저장'링크 (#updateLink)가 있습니다. 일단 응답을 받으면 앱이 갑자기 닫힙니다. 이것은 전체 화면 모드에서만 발생합니다.Angular JS - iOS 8 - iPad Air : 전체 화면 응용 프로그램이 닫힙니다.

HTML :

<div id="footerAnnouncementsDiv" class="footerAnnouncementsDiv"> 
     <a href id="updateLink" class="saveLink">Save</a> 
     <a href id="cancelLink" class="cancelLink">Cancel</a> 
     <a href id="createLink" class="saveLink" style="float:left">Create New Announcement</a> 
    </div> 

JS :

$("#updateLink").on("click", function (e) { 
      e.preventDefault(); 
      if (mode == "edit") { 
       //This one 
       updateAnnouncementsData(); 
      } 
      else if (mode == "create") { 
       //Ignore this one 
       createNewAnnouncement(); 
      } 

      mode = "edit"; 
     }); 
    //Function to retrieve entire result set from backend 
    function getAnnouncementsData() { 
     $.ajax({ 
      url: webServiceURL + "getAllAnnouncements", 
      beforeSend: function (request) { 
       request.setRequestHeader("Authorization", user.slsPlnrId + '~' + user.role + '~' + user.authId + '~' + AC); 
      }, 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify({ "sls_plnr_id": user.slsPlnrId,"role": user.role }), 
      async: false, 
      timeout: 30000, 
      success: function (result, status, xhr) { 
       if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { 

        $("#announcementsListDiv").empty(); 

        var x = $(result.announcements).sort("anncmt_dt", "desc"); 

        $.each(x, function (iterator, item) { 

         var datestr = item.anncmt_dt.split(/[-T.]/); 
         var dateObj = new Date(datestr.slice(0, 3).join('/') + ' ' + datestr[3]); 
         var day = dateObj.getDate().toString(); 
         var month = monthNames[dateObj.getMonth()].toString(); 

         var constructor = '<div class="announcementItem" id="' + item.anncmt_id + '">'; 
         constructor += '<div class="dateStampDiv"><span class="dayLabel">' + day + '</span></br><span class="monthLabel">' + month + '</span></div>'; 
         constructor += '<div style="display: none" id="' + item.anncmt_id + 'date">' + item.anncmt_dt + '</div>'; 
         constructor += '<div class="shortAnnouncementDiv">'; 
         constructor += '<div class="shortHeaderDiv" id="' + item.anncmt_id + 'header">' + item.anncmt_sbj + '</div>'; 
         if (item.anncmt_desc.length > 90) { 
          constructor += '<div class="shortDescDiv">' + item.anncmt_desc.substring(0, 90).trim() + '...' + '</div>'; 
         } 
         else { 
          constructor += '<div class="shortDescDiv">' + item.anncmt_desc + '</div>'; 
         } 
         constructor += '<div style="display: none" id="' + item.anncmt_id + 'description">' + item.anncmt_desc.trim() + '</div>'; 
         constructor += '</div><a href="#" id="a' + item.anncmt_id + '" class="deleteAnnouncement" />'; 
         constructor += '</div>'; 

         $("#announcementsListDiv").append(constructor); 
        }); 
        $("#announcementsListDiv").append('<div style="clear:both"></div>'); 

        if (x.length == 0) { 
         mode = "create"; 
        } 
        //$(".announcementItem").first().trigger("click"); 
       } 
      }, 
      error: function (xhr, status, error) { 
       alert("An error occured while processing your request"); 
      } 
     }); 
    } 


//Function to update record at backend 
    function updateAnnouncementsData() { 
     var jsonObj = {}; 
     jsonObj.sls_plnr_id = user.slsPlnrId; 
     jsonObj.role = user.role; 
     jsonObj.unread_count = ""; 
     jsonObj.announcements = []; 
     var announcement = {}; 
     var idVal = $(".selectedDivBorder").attr("id"); 
     announcement.anncmt_id = idVal; 
     if ($("#announcementDisplayHeaderDiv").children().length == 0) { 
      announcement.anncmt_sbj = $("#announcementDisplayHeaderDiv").text(); 
     } 
     else { 
      announcement.anncmt_sbj = $("#announcementDisplayHeaderDiv > form > input").val(); 
     } 

     if ($("#announcementDisplayDescDiv").children().length == 0) { 
      announcement.anncmt_desc = $("#announcementDisplayDescDiv").text(); 
     } 
     else { 
      announcement.anncmt_desc = $("#announcementDisplayDescDiv > form > textarea").val(); 
     } 

     if (announcement.anncmt_sbj.trim() == "" || announcement.anncmt_desc.trim() == "") { 
      alert("Announcement Subject or Description cannot be left blank"); 
      return; 
     } 
     var dt = new Date(); 
     announcement.anncmt_dt = dt.getFullYear() + "-" + dt.getMonth() + "-" + dt.getDate(); 
     announcement.anncmt_read_ind = ""; 
     jsonObj.announcements.push(announcement); 
     $.ajax({ 
      url: webServiceURL + "updateAnnouncements", 
      beforeSend: function (request) { 
       request.setRequestHeader("Authorization", user.slsPlnrId + '~' + user.role + '~' + user.authId + '~' + AC); 
      }, 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      data: JSON.stringify(jsonObj), 
      async: false, 
      success: function (result, status, xhr) { 
       if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { 
        if (result.status == "success") { 
         alert(result.message); 
         getAnnouncementsData(); 
         //$("#" + idVal).trigger("click"); 
         $("#createLink").css("display", "initial"); 
        }else{ 
         alert(result.message); 
        } 
       } 
      }, 
      error: function (xhr, status, error) { 
       alert("An error occured while processing your request"); 
       $(".announcementItem").first().trigger("click"); 
      } 
     }); 
    } 

는 아마 (새 탭에서 열 수) 외부 URL을 가리키는 링크에 의해 발생하는 것으로 문제를 진단했지만, 그 수정 프로그램이 작동하지 않습니다. 전체 화면 앱이 닫히면 모바일 Safari에서 링크가 열리지 않기 때문에 그런 경우는 아닙니다. 이것은 정말 중요하고 해결책을 빨리 찾아야합니다! SOlutions 크게 주시면 감사하겠습니다!

답변

0

이 답변을 찾았습니다. Safari 콘솔 디버거를 사용하여 어떤 이벤트가 시작되었는지 확인했습니다. ng-touch (Angular Touch)처럼 문제가 발생하여 여러 번의 이벤트가 발생하여 클릭 이벤트가 계속 발생했습니다. Angular Touch (어쨌든 사용되지 않았 음)를 제거하고 기능이 제대로 작동하기 시작했습니다.