Tôi gặp sự cố khi nhận được new Function
để làm việc trong Công nhân Web. Tôi có một trang HTML để sinh ra một Web Worker. Web Worker này thực thi mã thông qua new Function(str)
. Tôi đang cố gắng sử dụng ứng dụng này trong ứng dụng Chrome được đóng gói, ứng dụng yêu cầu một trang sử dụng mã giống như eval
được liệt kê rõ ràng dưới dạng trang hộp cát trong tệp kê khai.Bật 'Chức năng mới' trong Công nhân Web với CSP
Giờ đây, có hai lựa chọn:
- Do danh sách trang được sandboxed. Nếu tôi làm như vậy, tôi có thể sử dụng
new Function
, nhưng tôi không thể sinh ra một Web Worker vì tôi không thể thực hiện bất kỳ yêu cầu nào (trang sandbox có một nguồn gốc duy nhất).new Worker(...)
ném một sốSECURITY_ERR
.new Function
công trình trong sandboxnew Worker
thất bại trong sandbox do nguồn gốc độc đáo
- Đừng danh sách trang để được sandboxed. Nếu tôi làm như vậy, tôi có thể sinh ra một Web Worker, nhưng nhân viên không thể sử dụng
new Function
vì nó không phải là sandboxed.new Function(...)
ném một sốEvalError
phàn nàn về việc sử dụng nó.new Function
thất bại trong phi sandbox do làeval
-likenew Worker
công trình phi sandbox
CSP của tôi là như sau:
sandbox allow-scripts script-src 'self' 'unsafe-eval'; object-src 'self'
gì tôi có thể thế nào để có được new Function
làm việc trong một Web Worker?
Hóa ra rằng URL 'dữ liệu:' không hoạt động vì các vấn đề cùng nguồn gốc, nhưng URL 'createObjectURL' từ các đốm màu (từ bài viết) hoạt động. Nó không phải là rất thuận tiện để inline toàn bộ kịch bản công nhân vào trang chính, nhưng nó có vẻ là cách duy nhất để làm cho nó hoạt động. Cảm ơn. – pimvdb
Tôi có thể thấy bây giờ tôi đã sử dụng url dữ liệu thay vì url đối tượng trong câu trả lời, xin lỗi vì điều đó. Bạn có thể làm một bước xây dựng để làm cho nó thuận tiện hơn. – molnarg