Saya sedang mengerjakan aplikasi perusahaan lama yang kodenya ditulis pada tahun 2001 menggunakan kombinasi JavaScript, HTML, Intersystems Cache, dan Cache Weblink.

Inilah yang ada di index.html untuk aplikasi web:

<HTML>
<HEAD>
</HEAD>

<FRAMESET ROWS="32,*" FRAMEBORDER="no" border="0" framespacing="0">
  <FRAME
        SRC="sysnav.html"
        NAME="sysnav"
        SCROLLING="no"
        MARGINHEIGHT="10"
        MARGINWIDTH="10"
        NORESIZE>
  <FRAME
        SRC="cgi-bin/nph-mgwcgi?MGWLPN=dev&wlapp=SYSTEM&SystemAction=DisplayContentFrame"
        NAME="content"
        SCROLLING="auto"
        MARGINHEIGHT="0"
        MARGINWIDTH="10">
</FRAMESET>
<noframes>

</noframes>

</HTML>

Masalah yang saya miliki adalah bahwa dalam bingkai content, HTML untuk bingkai itu dibuat secara otomatis setiap saat, tetapi saya perlu menyertakan jQuery dalam bingkai.

Apakah ada peretasan/solusi yang dapat saya lakukan untuk memasukkan jQuery ke dalam bingkai content?

3
homersimpson 19 Agustus 2017, 01:01

2 jawaban

Jawaban Terbaik

Seperti yang disinggung dalam komentar, jQuery dapat disuntikkan ke dalam bingkai selama bingkai berada di domain yang sama.

Javascript Vanila

Tag skrip seperti di bawah ini dapat ditambahkan ke elemen <head> index.html. Itu menunggu hingga bingkai konten dimuat melalui addEventListener()< /a> dan kemudian secara dinamis menambahkan tag <script> dengan atribut src yang menunjuk ke kode jQuery yang dihosting oleh Perpustakaan yang Dihosting Google.

<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function() {
    frames['content'].addEventListener('load', function() {
        var contentFrameHead = frames["content"].document.getElementsByTagName("head")[0];
        var newScriptTag = document.createElement('script');
        newScriptTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js';
        contentFrameHead.appendChild(newScriptTag);
      });
});
</script>

Lihat itu ditunjukkan di contoh plunker ini. Coba klik tombol berlabel Test jQuery Loaded in this frame? dan lihat bagaimana hasilnya berubah saat mengomentari baris 10 index.html.

Memanfaatkan jQuery di index.html

Mungkin terlalu banyak overhead, tetapi jika jQuery ditambahkan ke index.html, fungsi pembantu jQuery dapat digunakan. Saya mencoba menggunakannya untuk mempersingkat kode tetapi mengalami masalah saat mencoba membuat tag skrip menggunakan $ () - lihat jawaban ini untuk penjelasan mendetail mengapa itu tidak berhasil.

Jadi kode yang menggunakan fungsi pembantu jQuery tidak jauh lebih pendek ...

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>-->
<script type="text/javascript">
$(function() { //DOM-ready
  $(frames['content']).on('load', function() { //load for content frame
    var newScriptTag = document.createElement('script');
    newScriptTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js';
    var contentFrameHead = frames["content"].document.getElementsByTagName("head")[0];
    contentFrameHead.appendChild(newScriptTag);
  });
});

Jika bingkai konten memiliki domain yang berbeda

Jika tidak, jika domain bingkai konten adalah domain yang berbeda dari domain index.html, maka skrip sisi server (misalnya menggunakan PHP dengan cURL, nodeJS, dll.) mungkin diperlukan untuk mengambil konten halaman itu dan sertakan perpustakaan jQuery (yang mungkin tidak praktis).

4
Community 20 Juni 2020, 09:12

Tidak, tetapi Anda dapat membuat halaman baru dan memasukkannya ke dalam file src. Ya itu jelek, tetapi bisa berhasil dalam beberapa kasus. sertakan jquery di halaman baru, dan sertakan halaman lama di halaman baru.

2
Melle S. 18 Agustus 2017, 23:03