Mengonversi dari kotak pasir NATIVE ke IFRAME

Saya memiliki aplikasi besar yang ingin saya konversi dari kotak pasir NATIVE ke IFRAME karena NATIVE sudah tidak digunakan lagi. Alur umum aplikasi adalah sebagai berikut: Pengguna mengisi formulir di halaman awal dan menekan tombol Mulai. Halaman awal kemudian disembunyikan, dan berdasarkan nilai dari halaman pertama, pengguna kemudian diperlihatkan halaman baru. Masalah saya saat menggunakan IFRAME adalah halaman baru tidak pernah ditampilkan. Ini berfungsi seperti yang diharapkan dalam mode ASLI. Saya telah membuat skrip sederhana yang menunjukkan masalahnya. Tolong bantu saya memahami apa yang saya lupa atau lakukan salah.

Kode.gs

function doGet() {
  Logger.log('enter doget');
  var html = HtmlService.createTemplateFromFile('BeginHeader').evaluate()
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  return html;
}

function include(filename) {
  Logger.log('enter include');
  Logger.log(filename);
  var html = HtmlService.createHtmlOutputFromFile(filename).getContent();
  Logger.log(html);
  return html;
}

Javascript.html

<script
  src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script
  src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js">
</script>
<script 
  src="https://apis.google.com/js/api.js?onload=onApiLoad">
</script>

<script>
  function showForm(hdr) {
    console.log('enter showform');
    console.log(hdr);
    console.log('hiding first page');
    document.getElementById('beginDiv').style.display = 'none';
    var el = document.getElementById('recordDiv');
    el.innerHTML = hdr;
    console.log('showing new page');
    el.style.display = 'block';
  }

  function oops(error) {
    console.log('entered oops');
    alert(error.message);
  }
</script>

<script>
  $(document).ready(function() {
    console.log('begin ready');
    $("#beginForm").submit(function() {
      console.log('enter begin submit');
      //console.log('hiding first page');
      //document.getElementById('beginDiv').style.display = 'none';
      console.log('including page 2');
      google.script.run
      .withSuccessHandler(showForm)
      .withFailureHandler(oops)
      .include('Page2');
    });
  });

</script>

BeginHeader.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <div id="beginDiv" style="display:block">
      <p>Click on Begin. </p>
      <form id="beginForm">
        <input type="submit" value="Begin">
      </form>
    </div>

<!-- results of content being filled in -->
    <div id="recordDiv"></div>

<?!= include('Javascript'); ?>

  </body>
</html>

Halaman2.html

<!DOCTYPE html>
<html>
  <body>
      <p> This is page 2. </p>
  </body>
</html>

person KBerk    schedule 19.11.2015    source sumber


Jawaban (1)


Tidak ada gunanya menggunakan tombol tipe "kirim", kecuali Anda ingin memaksa formulir untuk membuat Permintaan HTTP, dan memuat ulang aplikasi. Itulah fungsi tombol ketik "kirim". Ini menyebabkan halaman dimuat ulang. Tombol jenis "kirim" dimaksudkan untuk bekerja sama dengan formulir dengan cara tertentu. Ini menyebabkan permintaan GET atau POST terjadi. Itulah masalahnya. Jadi, Anda perlu mengkonfigurasi ulang sedikit.

Cukup gunakan tombol biasa.

<input type="button" value="Begin" onmouseup="gotoPg2()">

Saya membuat fungsi gotoPg2() untuk mengujinya:

<script>
  window.gotoPg2 = function() {
    console.log('enter begin submit');
    //console.log('hiding first page');
    //document.getElementById('beginDiv').style.display = 'none';
    console.log('including page 2');
    google.script.run
      .withSuccessHandler(showForm)
      .withFailureHandler(oops)
      .include('Page2');
  };
</script>

Jika Anda menggunakannya, Anda tidak memerlukan kode $(document).ready(function() { etc. lagi. Dan, jika Anda tidak memerlukan kode itu, Anda tidak perlu memuat jQuery.

Kecuali Anda menggunakan jQuery untuk hal lain, Anda tidak memerlukan:

<script
  src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script
  src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js">
</script>

Mode NATIVE mungkin memblokir penggunaan permintaan "kirim" yang dimaksudkan. Itu sebabnya kode di NATIVE berfungsi. IFRAME memungkinkan segala sesuatunya berfungsi sebagaimana dibuat dan dimaksudkan untuk berfungsi, yang berarti halaman tersebut mungkin mencoba dimuat ulang, dan terjadi kesalahan. Saya mendapatkan kesalahan halaman 404 di konsol browser.

person Alan Wells    schedule 20.11.2015
comment
terima kasih telah menunjukkan bagaimana saya menyalahgunakan tombol kirim jenis. Saya tidak mengharapkan atau menginginkan halaman awal saya dimuat ulang. Saya mengikuti saran Anda untuk menggunakan tombol jenis tombol dan aplikasi saya sekarang berfungsi sesuai keinginan saya. - person KBerk; 24.11.2015
comment
Terima kasih atas masukannya. - person Alan Wells; 24.11.2015