2017-03-12 7 views
-1

기본적으로 Gmail API를 사용하여 직접 기능을 보내고 답장을 작성합니다. 문제는 답장 섹션에 있습니다. jQuery를 사용하여 내받은 편지함 (최대 개수 : 10)에 나타나는 모든 메시지에 대해 div을 동적으로 생성하고 div (메일 링크를 클릭 할 때 나타나는 하나의 개별 집합)이 각각 div 인 경우, 주제, 답장 및 닫기 버튼에 modal-header div가 표시되고 콘텐츠를 표시하기 위해 modal-body div가 iframe 인 div가 있습니다.Javascript를 사용하여 현재 표시된 요소의 ID를 어떻게 검색합니까?

First set of divs

The "#message-modal-"+message.id window that pops up and becomes visible when I click on a link; this is what I want to fade out

var message1; 
 

 
function appendMessageRow(message) { 
 
    $('.table-inbox tbody').append(
 
    '<tr>\ 
 
      <td>' + getHeader(message.payload.headers, 'From') + '</td>\ 
 
      <td>\ 
 
       <a href="#message-modal-' + message.id + 
 
    '" data-toggle="modal" id="message-link-' + message.id + '">' + 
 
    getHeader(message.payload.headers, 'Subject') + 
 
    '</a>\ 
 
      </td>\ 
 
      <td>' + getHeader(message.payload.headers, 'Date') + '</td>\ 
 
      </tr>' 
 
); 
 

 
    $('body').append(
 
    '<div class="modal fade" id="message-modal-' + message.id + 
 
    '" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">\ 
 
      <div class="modal-dialog modal-lg">\ 
 
       <div class="modal-content">\ 
 
\t \t \t \t <div class="modal-header">\ 
 
        <h4 class="modal-title" id="myModalLabel">' + 
 
    getHeader(message.payload.headers, 'Subject') + 
 
    '</h4>\ 
 
\t \t \t \t \t <button type="button"\ 
 
          class="close"\ 
 
          data-dismiss="modal"\ 
 
          aria-label="Close" style="float:right;">\ 
 
\t \t \t \t \t <span aria-hidden="true">&times;</span></button>\ 
 
\t \t \t \t \t <span></span>\ 
 
\t \t \t \t \t <a data-toggle="modal" href="#reply-modal" id="reply-button" class="btn btn-primary">Reply</a>\ 
 
       </div>\ 
 
       <div class="modal-body">\ 
 
        <iframe id="message-iframe-' + message.id + '" srcdoc="<p>Loading...</p>">\ 
 
        </iframe>\ 
 
       </div>\ 
 
       </div>\ 
 
      </div>\ 
 
      </div>' 
 
); 
 

 
    $('#message-link-' + message.id).on('click', function() { 
 
    var ifrm = $('#message-iframe-' + message.id)[0].contentWindow.document; 
 
    $('body', ifrm).html(getBody(message.payload)); 
 
    message1 = message; 
 
    }); 
 

 
    $('#reply-button).on(' 
 
    click ',function(){ 
 
    $("#reply-to").val(getHeader(message1.payload.headers, 'From')); $("#reply-subject").val('RE: ' + getHeader(message1.payload.headers, 'Subject')); $("#message-modal-" + message1.id).fadeOut(); $('div.modal-backdrop.fade.in').fadeOut(); 
 
    }); 
 
}
난에 '받는 사람'및 '제목'필드를 채울 함수를 호출하는 회신을 버튼을 사용하려면 reply-modal ( 답장 버튼은 이고 태그입니다. href = # reply-modal) message-modal-message.id div가 사라진 후에 표시됩니다. 문제는 내가 회색으로 그려진 배경과 함께 페이드 아웃해야하는이 div의 ID를 얻을 수 없다는 것입니다.

또한 message 개체가 필요하고 클릭 한 메시지 링크의 message.id이 아니라면 '받는 사람'과 '제목'을 새로 입력하여 reply-modal div로 전송할 수 있습니다. 하지만 클릭 한 메시지 중 message.id은 수신되지 않지만받은 편지함 페이지에 표시된 메일 목록의 마지막 메시지는 수신되지 않으므로 은 message.id이 올바르지 않아서 사라지지 않습니다. 마찬가지로 reply-modal div의 '받는 사람'및 '보낸 사람'입력란에도 목록의 마지막 메일 정보가 포함되어 있습니다. 열어 본 메일은 중요하지 않습니다. 또한 message-modal-message.id div가 사라지지 않기 때문에 reply-modal div가 그 뒤에 표시되며 div를 닫아야 div가 reply-modal div가됩니다. jQuery 선택기 메서드 $('#reply-modal').on('click',.. 대신 외부에서 JS 함수를 사용하려고 시도했지만 할 수 없습니다.

기본적으로 메시지를 열어보고 메시지 개체를 가져 오는 방법은 무엇입니까?

The reply box that I would want the 'To' and 'Subject' headers from <code>message.payload</code> to show in

답변

0

이 정확히 내가 얘기 한 것입니다. 죄송합니다. 질문을 이해하려고 할 때 혼란을 일으키면 전체 코드를 붙여 넣을 수 없습니다.

는 우리는 또한 새로운 회신 양식에 필요한 데이터를 전달하는 두 가지 중요한 변수 reply-toreply-subject를 사용하는 디스플레이 페이지로 div의로 추가 모든 메시지 거기에 할 필요가

'답장'버튼은이 열립니다 .

이전에 불가능했던 '메시지 표시'div의 닫음 또한 이제 액세스 할 수있는 메시지 ID에 연결되었습니다.

그 밖의 모든 것은 매우 산뜻합니다. 응답을 보내는 데 필요한 기능은 새 전자 메일을 보내는 것과 동일하며 코드의 맨 끝에 표시됩니다.

"회신"버튼을 클릭하면 현재 표시된 메시지의 메시지 ID를 캡처 할 수 없었습니다. 이것은 해결 방법보다 "더 나은"해결책이지만, 내가 원했던 것을 할 수 있다면 사람이 더 짧을 것입니다!

<!doctype html> 
 
<html> 
 

 
<head> 
 
    <title>Gmail API demo</title> 
 
    <meta charset="UTF-8"> 
 

 
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> 
 
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"> 
 
    <style> 
 
    iframe { 
 
     width: 100%; 
 
     border: 0; 
 
     min-height: 80%; 
 
     height: 600px; 
 
     display: flex; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <div class="container"> 
 
    <h1>Gmail API demo</h1> 
 

 
    <button id="authorize-button" class="btn btn-primary hidden">Authorize</button> 
 

 
    <a href="#compose-modal" data-toggle="modal" id="compose-button" class="btn btn-primary pull-right hidden">Compose</a> 
 

 

 
    <table class="table table-striped table-inbox hidden"> 
 
     <thead> 
 
     <tr> 
 
      <th>From</th> 
 
      <th>Subject</th> 
 
      <th>Date/Time</th> 
 
     </tr> 
 
     </thead> 
 
     <tbody></tbody> 
 
    </table> 
 
    </div> 
 

 
    <div class="modal fade" id="compose-modal" tabindex="-1" role="dialog"> 
 
    <div class="modal-dialog modal-lg"> 
 
     <div class="modal-content"> 
 
     <div class="modal-header"> 
 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
 
\t \t \t <span aria-hidden="true">&times;</span> 
 
\t \t \t </button> 
 
      <h4 class="modal-title">Compose</h4> 
 
     </div> 
 
     <form onsubmit="return sendEmail();"> 
 
      <div class="modal-body"> 
 
      <div class="form-group"> 
 
       <input type="email" class="form-control" id="compose-to" placeholder="To" required /> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <input type="text" class="form-control" id="compose-subject" placeholder="Subject" required /> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <textarea class="form-control" id="compose-message" placeholder="Message" rows="10" required></textarea> 
 
      </div> 
 
      </div> 
 
      <div class="modal-footer"> 
 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
 
      <button type="submit" id="send-button" class="btn btn-primary">Send</button> 
 
      </div> 
 
     </form> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 
    <div class="modal fade" id="reply-modal" tabindex="-1" role="dialog"> 
 
    <div class="modal-dialog modal-lg"> 
 
     <div class="modal-content"> 
 
     <div class="modal-header"> 
 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
 
\t \t \t <span aria-hidden="true">&times;</span> 
 
\t \t \t </button> 
 
      <h4 class="modal-title">Reply</h4> 
 
     </div> 
 
     <form onsubmit="return sendReply();"> 
 
      <div class="modal-body"> 
 
      <div class="form-group"> 
 
       <input type="email" class="form-control" id="reply-to" required disabled/> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <input type="text" class="form-control" id="reply-subject" required /> 
 
      </div> 
 

 
      <div class="form-group"> 
 
       <textarea class="form-control" id="reply-message" placeholder="Message" rows="10" required></textarea> 
 
      </div> 
 
      </div> 
 
      <input type="hidden" id="reply-message-id" /> 
 
      <div class="modal-footer"> 
 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
 
      <button type="submit" id="reply-button" class="btn btn-primary">Send</button> 
 
      </div> 
 
     </form> 
 
     </div> 
 
    </div> 
 
    </div> 
 

 

 
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script> 
 
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
 
    <script src="withinViewport.js"></script> 
 
    <script src="jquery.withinviewport.js"></script> 
 
    <script type="text/javascript"> 
 
    var clientId = 'YOUR_CLIENT_ID.apps.googleusercontent.com'; 
 
    var apiKey = 'YOUR_API_KEY'; 
 
    var scopes = 'https://www.googleapis.com/auth/gmail.readonly'; 
 

 
    function handleClientLoad() { 
 
     gapi.client.setApiKey(apiKey); 
 
     window.setTimeout(checkAuth, 1); 
 
    } 
 

 
    function checkAuth() { 
 
     gapi.auth.authorize({ 
 
     client_id: clientId, 
 
     scope: scopes, 
 
     immediate: true 
 
     }, handleAuthResult); 
 
    } 
 

 
    function handleAuthClick() { 
 
     gapi.auth.authorize({ 
 
     client_id: clientId, 
 
     scope: scopes, 
 
     immediate: false 
 
     }, handleAuthResult); 
 
     return false; 
 
    } 
 

 
    function handleAuthResult(authResult) { 
 
     if (authResult && !authResult.error) { 
 
     loadGmailApi(); 
 
     $('#compose-button').removeClass("hidden"); 
 
     $('#authorize-button').remove(); 
 
     $('.table-inbox').removeClass("hidden"); 
 
     } else { 
 
     $('#authorize-button').removeClass("hidden"); 
 
     $('#authorize-button').on('click', function() { 
 
      handleAuthClick(); 
 
     }); 
 
     } 
 
    } 
 

 
    function loadGmailApi() { 
 
     gapi.client.load('gmail', 'v1', displayInbox); 
 
    } 
 

 
    function displayInbox() { 
 
     var request = gapi.client.gmail.users.messages.list({ 
 
     'userId': 'me', 
 
     'labelIds': 'INBOX', 
 
     'maxResults': 10 
 
     }); 
 
     request.execute(function(response) { 
 
     $.each(response.messages, function() { 
 
      var messageRequest = gapi.client.gmail.users.messages.get({ 
 
      'userId': 'me', 
 
      'id': this.id 
 
      }); 
 
      messageRequest.execute(appendMessageRow); 
 
     }); 
 
     }); 
 
    } 
 

 
    function appendMessageRow(message) { 
 
     var reply_to = (getHeader(message.payload.headers, 'Reply-to') !== '' ? getHeader(message.payload.headers, 'Reply-to') : getHeader(message.payload.headers, 'From')).replace(/\"/g, '&quot;'); 
 
     var reply_subject = 'Re: ' + getHeader(message.payload.headers, 'Subject').replace(/\"/g, '&quot;'); 
 
     $('.table-inbox tbody').append(
 
     '<tr>\ 
 
      <td>' + getHeader(message.payload.headers, 'From') + '</td>\ 
 
      <td>\ 
 
       <a href="#message-modal-' + message.id + 
 
     '" data-toggle="modal" id="message-link-' + message.id + '">' + 
 
     getHeader(message.payload.headers, 'Subject') + 
 
     '</a>\ 
 
      </td>\ 
 
      <td>' + getHeader(message.payload.headers, 'Date') + '</td>\ 
 
      </tr>' 
 
    ); 
 

 
     $('body').append(
 
     '<div class="modal fade" id="message-modal-' + message.id + 
 
     '" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">\ 
 
      <div class="modal-dialog modal-lg">\ 
 
       <div class="modal-content">\ 
 
\t \t \t \t <div class="modal-header">\ 
 
        <h4 class="modal-title" id="myModalLabel">' + 
 
     getHeader(message.payload.headers, 'Subject') + 
 
     '</h4>\ 
 
\t \t \t \t \t <button type="button"\ 
 
          class="close"\ 
 
          data-dismiss="modal"\ 
 
          aria-label="Close" style="float:right;">\ 
 
\t \t \t \t \t <span aria-hidden="true">&times;</span></button>\ 
 
\t \t \t \t \t <span></span>\ 
 
       </div>\ 
 
       <div class="modal-body">\ 
 
        <iframe id="message-iframe-' + message.id + '" srcdoc="<p>Loading...</p>">\ 
 
        </iframe>\ 
 
\t \t \t \t <div class="modal-footer">\ 
 
\t \t \t <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>\ 
 
\t \t \t <button type="button" class="btn btn-primary reply-button" data-dismiss="modal" data-toggle="modal" data-target="#reply-modal"\ 
 
\t \t \t onclick="fillInReply(\'' + reply_to + '\',\'' + reply_subject + '\',\'' + getHeader(message.payload.headers, 'Message-ID') + '\');">Reply</button>\ 
 
\t \t \t </div> \t \ 
 
       </div>\ 
 
      </div>\ 
 
\t \t \t </div>\ 
 
      </div>' 
 
    ); 
 

 

 
     $('#message-link-' + message.id).on('click', function() { 
 
     var ifrm = $('#message-iframe-' + message.id)[0].contentWindow.document; 
 
     $('body', ifrm).html(getBody(message.payload)); 
 
     }); 
 
    } 
 

 

 

 
    function getHeader(headers, index) { 
 
     var header = ''; 
 
     $.each(headers, function() { 
 
     if (this.name === index) { 
 
      header = this.value; 
 
     } 
 
     }); 
 
     return header; 
 
    } 
 

 
    function getBody(message) { 
 
     var encodedBody = ''; 
 
     if (typeof message.parts === 'undefined') { 
 
     encodedBody = message.body.data; 
 
     } else { 
 
     encodedBody = getHTMLPart(message.parts); 
 
     } 
 
     encodedBody = encodedBody.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, ''); 
 
     return decodeURIComponent(escape(window.atob(encodedBody))); 
 
    } 
 

 
    function getHTMLPart(arr) { 
 
     for (var x = 0; x <= arr.length; x++) { 
 
     if (typeof arr[x].parts === 'undefined') { 
 
      if (arr[x].mimeType === 'text/html') { 
 
      return arr[x].body.data; 
 
      } 
 
     } else { 
 
      return getHTMLPart(arr[x].parts); 
 
     } 
 
     } 
 
     return ''; 
 
    } 
 

 
    function sendEmail() { 
 
     $('#send-button').addClass('disabled'); 
 

 
     sendMessage({ 
 
      'To': $('#compose-to').val(), 
 
      'Subject': $('#compose-subject').val() 
 
     }, 
 
     $('#compose-message').val(), 
 
     composeTidy 
 
    ); 
 
     return false; 
 
    } 
 

 
    function sendMessage(headers_obj, message, callback) { 
 
     var email = ''; 
 

 
     for (var header in headers_obj) 
 
     email += header += ": " + headers_obj[header] + "\r\n"; 
 

 
     email += "\r\n" + message; 
 

 
     var sendRequest = gapi.client.gmail.users.messages.send({ 
 
     'userId': 'me', 
 
     'resource': { 
 
      'raw': window.btoa(email).replace(/\+/g, '-').replace(/\//g, '_') 
 
     } 
 
     }); 
 

 
     return sendRequest.execute(callback); 
 
    } 
 

 
    function fillInReply(to, subject, message_id) { 
 
     $('#reply-to').val(to); 
 
     $('#reply-subject').val(subject); 
 
     $('#reply-message-id').val(message_id); 
 
    } 
 

 
    function sendReply() { 
 
     $('#reply-button').addClass('disabled'); 
 
     sendMessage({ 
 
      'To': $('#reply-to').val(), 
 
      'Subject': $('#reply-subject').val(), 
 
      'In-Reply-To': $('#reply-message-id').val() 
 
     }, 
 
     $('#reply-message').val(), 
 
     replyTidy 
 
    ); 
 
     return false; 
 
    } 
 

 

 

 
    function replyTidy() { 
 
     $('#reply-modal').modal('hide'); 
 
     $('#reply-message').val(''); 
 
     $('#reply-button').removeClass('disabled'); 
 
    } 
 

 

 
    function composeTidy() { 
 
     $('#compose-modal').modal('hide'); 
 

 
     $('#compose-to').val(''); 
 
     $('#compose-subject').val(''); 
 
     $('#compose-message').val(''); 
 

 
     $('#send-button').removeClass('disabled'); 
 
    } 
 
    </script> 
 
    <script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script> 
 
</body> 
 

 
</html>