Apakah Anda ingin meminta fitur atau melaporkan bug?
Serangga
Apa perilaku saat ini?
Saya telah menyertakan "signature_pad": "^3.0.0-beta.3" di angular6 melalui package.json
Ini berfungsi dengan baik di semua Peramban, tetapi pada IE11 situs web tidak dapat dimuat karena kesalahan.
"Syntaxerror" tanpa deskripsi apa pun yang salah.
Saya tidak tahu bagaimana tampilan proses build Angular 6, tetapi Anda harus mengompilasinya menggunakan konfigurasi Babel yang sama dengan yang Anda gunakan untuk mengkompilasi kode Anda sendiri.
Anda juga dapat menggunakan fitur webpack resolve.alias
(tidak diuji), yang seharusnya memungkinkan Anda untuk memuat versi yang sudah dikompilasi sebagai gantinya:
module.exports = {
//...
resolve: {
alias: {
signature_pad: 'signature_pad/dist/signature_pad.js'
}
}
};
Terima kasih atas respon cepat Anda.
Saya akan mencobanya. Saya juga akan mencoba polyfill babel jika ide Anda tidak berhasil. Saya tidak pernah menggunakannya sebelumnya.
Coba impor dengan cara ini:
berubah dari:
import SignaturePad from 'signature_pad';
ke:
import * as SignaturePad from 'signature_pad/dist/signature_pad';
fungsi unduh (dataURL, nama file) {
if (navigator.userAgent.indexOf("Safari") > -1 && navigator.userAgent.indexOf("Chrome") === -1) {
jendela.buka(dataURL);
}
### //Tambahkan pernyataan di bawah ini di app.js - ini berfungsi karena dua lainnya tidak didukung di IE 11
else if(window.navigator && window.navigator.msSaveOrOpenBlob){var blobwin = dataURLToBlob(dataURL);window.navigator.msSaveOrOpenBlob(blobwin, nama file);}
lain {
var gumpalan = dataURLToBlob(dataURL);
var url = window.URL.createObjectURL(gumpalan);
var a = document.createElement("a");
a.style = "display: none";
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}
}
Solusi @sdqwerty berhasil untuk saya. Namun, perlu dicatat bahwa webpack memiliki bidang bernama mainFields yang defaultnya adalah ['browser', 'module', 'main']
. Ini berada dalam urutan prioritas, dan signature_pad tidak menyertakan browser
di package.json , jadi modul diambil. Ini memetakan ke file .m.js
, yang menyertakan sintaks seperti kelas ES6 -- yang tidak didukung oleh IE11.
@szimek Saya sarankan Anda memperbarui package.json untuk memasukkan bidang browser sesuai rekomendasi npm di sini:
https://docs.npmjs.com/files/package.json#browser
Itu akan menyelesaikan masalah IE11 ini.
Ini berhasil untuk saya:
module.exports = {
resolve: {
alias: {
'signature_pad': 'signature_pad/dist/signature_pad' // <- hier without '.js' at the end!
}
}
};
Dan dengan Laravel-Mix:
mix.webpackConfig({
resolve: {
alias: {
'signature_pad': 'signature_pad/dist/signature_pad',
}
}
});
Saya tidak tahu bagaimana tampilan proses build Angular 6, tetapi Anda harus mengompilasinya menggunakan konfigurasi Babel yang sama dengan yang Anda gunakan untuk mengkompilasi kode Anda sendiri.
Anda juga dapat menggunakan fitur webpack
resolve.alias
(tidak diuji), yang seharusnya memungkinkan Anda untuk memuat versi yang sudah dikompilasi sebagai gantinya:module.exports = { //... resolve: { alias: { signature_pad: 'signature_pad/dist/signature_pad.js' } } };
Versi kompilasi v3.0.0-beta.4 tidak mendukung IE11 karena kata kunci class
.
Komentar yang paling membantu
Coba impor dengan cara ini:
berubah dari:
import SignaturePad from 'signature_pad';
ke:
import * as SignaturePad from 'signature_pad/dist/signature_pad';