6

ile 'new Function' özelliğini etkinleştirin Web Çalışanı'nda çalışmak için new Function alıyorum konusunda sorun yaşıyorum. Web Çalışanı üreten bir HTML sayfam var. Bu Web Çalışanı, kodu new Function(str) üzerinden yürütür. Bunu, bildirimde korumalı bir sayfa olarak açıkça listelenecek eval benzeri bir kod kullanan bir sayfa gerektiren paketlenmiş bir Chrome uygulamasında kullanmaya çalışıyorum.Bir Web Çalışanı'nda CSP

  • listesine korumalı alan edilecek sayfasını yapın:

    Şimdi, iki seçenek vardır. Bunu yaparsam new Function kullanabilirim, ancak Web İşçisi oluşturamıyorum çünkü herhangi bir istekte bulunamıyorum (korumalı sayfa benzersiz bir kaynağa sahip). new Worker(...), SECURITY_ERR'u atar. nedeniyle benzersiz kökeni

  • new Worker sanal alanında başarısız sanal alanda
    • new Function eserler
  • değil listesine korumalı alan olması sayfasını yapın. Bunu yaparsam, bir Web Çalışanı oluşturabilirim ancak çalışan, korumalı olmadığı için new Function kullanamaz. new Function(...), kullanımı hakkında şikayet eden bir EvalError atıyor.
    • new Function nedeniyle dışı sanal alanda eval benzeri
    • new Worker eser olmasının dışı sanal alanda başarısız

şöyle My CSP geçerli:

sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self' 

Yaparsam ne Bir Web Çalışanı'nda çalışan new Function almak için?

cevap

5

Satır içi işçiler denilen bir teknik var, bunu kullanmayı öneririm.

  • bu dataurl

Bu işçiye somutlaştırın

  • bir "dataurl"
  • dönüştürelim işçi için kaynak kodunu içeren bir Blob nesnesi oluştur örnek kod ile tarif edilir HTML5, sitelerini WebWorkers tutorial numaralı telefondan ayırır. Bu şekilde, siteyi sanal alan olarak listeleyebilirsiniz, ancak harici istekler yapmaya gerek olmadığı için, korumalı modda da çalışmalıdır.

  • +0

    Bu 'data:' URL'lerinin aynı kökenli sorunlar nedeniyle çalışmadığı ortaya çıktı, ancak bloblardan 'createObjectURL' URL'leri (makaleden) çalışıyor. Tüm çalışan komut dosyasını ana sayfaya sığdırmak çok kolay değil, ancak çalışmanın tek yolu gibi görünüyor. Teşekkürler. – pimvdb

    +0

    Şimdi görebiliyorum ki, yanıt için nesne URL'si yerine veri URL'si kullandım, bunun için üzgünüm. Bunu daha uygun hale getirmek için bir inşa adımı yapabilirsiniz. – molnarg

    İlgili konular