Saya sedang mengerjakan proyek yang menggunakan pekerja web.
Di bagian kepala saya, saya memiliki kode ini:
var worker = new Worker("worker.js");
// More code
Ini berfungsi dengan baik di Safari, tetapi Chrome melaporkan kesalahan berikut:
Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.
Mengapa ini berfungsi dengan sempurna di Safari tetapi tidak di Chrome? Bagaimana cara mengatasinya?
Terima kasih.
file:///E:/programming/web/project/worker.js
. Jalan untuk proyek utama adalah ini:file:///E:/programming/web/project/index.html
.Jawaban:
Chrome tidak mengizinkan Anda memuat pekerja web saat menjalankan skrip dari file lokal.
sumber
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
- dan tidak keren jika halaman web hanya dapat mengakses sistem file Anda dengan cepat.Saya menggunakan solusi. Chrome memblokir
Worker
tapi tidak<script>
. Karenanya cara terbaik untuk membuat solusi universal adalah ini:Anda kemudian menautkannya seperti biasa
<script src="..."
. Dan setelah fungsinya ditentukan, Anda menggunakan kode kekejian ini:sumber
window!=seld
memeriksa apakah kode berjalan di pekerja web. Ini membuat kode ini portabel jika Anda memuat file javascript secara langsung dalam konteks lain.Masalahnya telah dijelaskan dengan baik oleh Noble Chicken tetapi saya memiliki solusi yang lebih umum untuk itu. Alih-alih menginstal wamp atau xamp, dengan python Anda dapat menavigasi ke folder tempat proyek Anda di-host dan mengetik:
python -m http.server
Hanya itu dan Anda akan memiliki server yang berjalan di folder itu, dapat dijangkau dari localhost.
sumber
python -m SimpleHTTPServer 8000
karena dimuat dengan <Python 3 (hanya untuk menyimpan pencarian google lainnya: D)php -S localhost:8000
Anda juga dapat menggunakan tanda --allow-file-access-from-files saat Anda meluncurkan Chrome.
Contoh untuk MacOsX:
Info selengkapnya: Setelan pekerja web untuk chrome
sumber
--allow-file-access-from-files
bendera aktif." seperti yang dinyatakan di stackoverflow.com/a/21771754/325418Itu karena batasan keamanan. Anda perlu menggunakan
http://
atauhttps://
protokol, bukanfile:///
.Jika Anda memiliki NodeJS terinstal, Anda cukup melakukan hal berikut. - Perhatikan bahwa ini adalah salah satu dari banyak opsi yang tersedia
Sekarang Anda dapat menggunakannya di folder mana pun yang ingin Anda akses isinya
http
.Arahkan ke
http://localhost:8000
(port default: 8000)sumber
Saya juga mengalami masalah yang sama dengan postingan Anda. Solusinya adalah Anda harus menjalankannya dengan localhost (wamp atau xamp). Itu akan selesai.
sumber
Solusi lain adalah menggunakan server web Google untuk ekstensi Chrome . Pilih direktori kerja Anda dan mulai server, Selesai!
sumber
Anda memerlukan server web untuk permintaan dari protokol HTTP, bukan file lokal dan berfungsi dengan benar :)
sumber
Chrome
memuat file tetapi tidak dapat menjalankannya. GunakanFirefox
. Ini bekerja untuk saya.sumber
Cara mudah membuat server http lokal di chrome adalah dengan aplikasi ini:
Server Web untuk Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
Deskripsi:
Dan itu tidak tidak aman sebagai flag --allow-file-access-from-files
sumber
Ini terinspirasi dari jawaban Thomas di atas. Tetapi dengan satu peringatan bahwa saya hanya ingin mendistribusikan HTML, jadi saya secara manual mengonversi js ke dataURL . dan mengaktifkan kotak centang URL data di dalamnya.
sumber
Dengan Python 2.x yang lebih banyak digunakan daripada Python 3.x, sesuatu seperti
python -m SimpleHTTPServer 8000
itu lebih umum diterapkan, dan tidak hanya untuk Mac OS X. Saya merasa perlu untuk digunakan di bawah Cygwin, misalnya.Dengan itu, contoh ini bekerja seperti seorang juara.
sumber
Seperti yang disebutkan, chrome tidak mendukungnya. Saya suka mendefinisikan pekerja saya di file yang sama. Ini adalah solusi yang berfungsi yang akan meningkatkan jumlah yang ditemukan di innerHTML dari elemen dengan
id=num
setiap 500ms.sumber
Kemungkinan alasannya adalah chrome tidak mengizinkan Anda memuat pekerja web saat menjalankan skrip dari file lokal. Dan saya coba jalankan kode di firefox saya, tidak bisa juga.
sumber
file://
di Firefox 51.0.1Ya, Ini tidak akan berfungsi di chorome jika Anda memuat file lokal. Tapi itu akan bekerja dengan baik di browser firefox. Dan Anda harus menambahkan kode di bawah ini dalam file HTML.
sumber