ক্রোম ওয়েব কর্মী লোড করতে পারে না


109

আমি এমন একটি প্রকল্পে কাজ করছি যা একটি ওয়েব কর্মী ব্যবহার করে।

আমার মাথা বিভাগে আমার এই কোডটি রয়েছে:

var worker = new Worker("worker.js");
// More code

এটি সাফারিতে দুর্দান্ত কাজ করে তবে ক্রোম নিম্নলিখিত ত্রুটিটি রিপোর্ট করে:

Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.

কেন এটি সাফারিতে পুরোপুরি কাজ করে তবে ক্রোম নয়? আমি কিভাবে এটা ঠিক করব?

ধন্যবাদ.


1
আপনি কি ফাইল প্রোটোকলটি বন্ধ করে দিচ্ছেন? আপনি অ্যাক্সেস পতাকা সেট এবং দেখতে হয় যদি এটা কাজ করে: stackoverflow.com/questions/18586921/...
epascarello

1
হ্যাঁ, ওয়েব কর্মীর জন্য পথ এই হল: file:///E:/programming/web/project/worker.js। প্রধান প্রকল্পের জন্য পথ এই হল: file:///E:/programming/web/project/index.html
প্রোগো

উত্তর:


84

স্থানীয় ফাইল থেকে স্ক্রিপ্টগুলি চালানোর সময় ক্রোম আপনাকে ওয়েব কর্মীদের বোঝা দেয় না।


6
থেকে এই উত্তর , Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.- এবং এটি ওয়েব পেজের জন্য উপযোগী নয় একটি বাতিক শুধু অ্যাক্সেস আপনার ফাইল সিস্টেম পাবে।
চেসমস্কাল

41
-1 ফির্সফক্স আপনাকে অবশ্যই এটি করতে দেয়, আপনি যদি ফাইলটিকে একটি উত্স হিসাবেও ব্যবহার করেন (যেমন, আপনি ব্রাউজারে স্থানীয় ফাইলটি দেখছেন)। এটি কেবল ক্রোম যা ভেঙে গেছে।
টোমা জ্যাটো - মনিকা

3
ফায়ারফক্স এখনও কাজ করে (হ্যাঁ ফাইল থেকে: //), ক্রোম এই ক্ষেত্রে নেই।
ইভিল

55

আমি একটি workaround ব্যবহার। ক্রোম ব্লক Workerকিন্তু না <script>। সুতরাং সর্বজনীন সমাধান করার সর্বোত্তম উপায় হ'ল:

function worker_function() {
    // all code here
}
// This is in case of normal worker start
// "window" is not defined in web worker
// so if you load this file directly using `new Worker`
// the worker code will still execute properly
if(window!=self)
  worker_function();

তারপরে আপনি এটিকে স্বাভাবিক হিসাবে লিঙ্ক করুন <script src="..."। এবং একবার ফাংশনটি সংজ্ঞায়িত হয়ে গেলে আপনি কোনও কোডের এই ঘৃণা ব্যবহার করুন:

new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'})));

এই সমাধান ভাল। কেন এই পৃথিবীতে কিছুই নিখুঁত নয়? প্রতিটি সফ্টওয়্যার ব্যাগ, ত্রুটি, বাচ্চা-আচরণ ইত্যাদি দ্বারা ব্যবহারকারীদের আন্দোলন করছে Firef ফায়ারফক্সও অহঙ্কারী কারণ এটি "ক্লিপ-পাথ" সিএসএস সম্পত্তি সমর্থন করতে অস্বীকার করেছে।
22sααc t ի βö এসএস

আমি কোনও জেএস দেব নই এবং এখানে স্ক্রিপ্ট ট্যাগ ব্যবহারের বিন্দুটি পাই না। এবং উইন্ডোটি কী! = স্বতঃপরীক্ষা? কেউ দয়া করে এই লোডিং ক্রমটি ব্যাখ্যা করতে পারেন? ধন্যবাদ.
শারুন

স্ক্রিপ্ট ট্যাগগুলি যদি HTML হিসাবে একই ডিরেক্টরিতে থাকে তবে গুগল ক্রোম দ্বারা লোড করা হবে directory window!=seldকোডটি ওয়েব কর্মীদের মধ্যে চলছে কিনা তা পরীক্ষা করে। আপনি সরাসরি অন্যান্য প্রসঙ্গে জাভাস্ক্রিপ্ট ফাইল লোড করার ক্ষেত্রে এটি এই কোডটিকে পোর্টেবল করে তোলে।
টোমা জ্যাটো - মনিকা

1
@ ট্রিসিল 7 কোড যা ওয়েব কর্মী প্রসঙ্গে কার্যকর করা উচিত।
টোমা জাটো - মনিকা

2
আমার মনে রাখা উচিত যে আপনি এই জাতীয় লিখিত কোনও কর্মীর কাছ থেকে আমদানি স্ক্রিপ্ট ব্যবহার করতে পারবেন না। কমপক্ষে, কোনও অতিরিক্ত কাজ ব্যতীত নয়। সুতরাং আপনার একটি মাল্টি-ফাইল কর্মীর জন্য আরও বেশি হস্তক্ষেপ দরকার need
স্লাগফিলার 4

41

সমস্যাটি নোবল চিকেন সঠিকভাবে ব্যাখ্যা করেছেন তবে আমার কাছে এর আরও সাধারণ সমাধান রয়েছে। পাইপ বা জ্যাম্প ইনস্টল করার পরিবর্তে অজগর দিয়ে আপনি আপনার প্রকল্পটি যে ফোল্ডারে হোস্ট করা আছে সেটিতে নেভিগেট করতে পারেন এবং টাইপ করুন:python -m http.server

কেবল এটি এবং আপনার সেই ফোল্ডারে একটি চলমান সার্ভার থাকবে, লোকালহোস্ট থেকে পৌঁছনীয়।


13
ম্যাকগুলি সম্ভবত python -m SimpleHTTPServer 8000<পাইথন 3 (আরও একটি গুগল অনুসন্ধান সংরক্ষণ করার জন্য: ডি) দিয়ে বোঝাই হওয়ার সাথে সাথে তাদের যেতে হবে
সিজ_প্রিলাস

3
আপনি এইচটি-সার্ভার নোড মডিউলটি ইনস্টল করতে পারেন এবং তারপরে টার্মিনাল থেকে পছন্দসই ফোল্ডারে নেভিগেট করতে পারেন এবং 'http-সার্ভার -p 3000' চালাতে পারেন।
হুয়ান ঝাং

"পাইথন-মিঃ http.server" এই স্ক্রিপ্টটি উল্লেখ করার জন্য পাইথন 3 প্রয়োজন
মাইলমা

এছাড়াও চেষ্টা করুনphp -S localhost:8000
উইলিয়াম এন্টারিকেন

29

আপনি যখন Chrome চালু করবেন তখন আপনি ফাইল-অ্যাক্সেস-থেকে-ফাইল- পতাকা ব্যবহার করতে পারেন ।

ম্যাকওএসএক্সের উদাহরণ:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files

আরও তথ্য: ক্রোমের জন্য ওয়েব কর্মী সেটিংস


উইন্ডোজ কমান্ড উইন্ডোটিতে নেভিগেট করুন: "সি: \ ব্যবহারকারীগণ \ NAME \ অ্যাপডাটা \ স্থানীয় \ গুগল \ ক্রোম এসএক্সএস \ অ্যাপ্লিকেশন", তারপরে chrome.exe চালান - ফাইল-অ্যাক্সেস-থেকে-ফাইল-ফাইলটি অনুলিপি করুন, তারপরে আপনার স্থানীয় ফাইলের পথটি অনুলিপি করুন যেমন c: \ temp \ myWeb \ index.html এবং খোলা ব্রাউজারের ইউআরএল এ পেস্ট করুন, সম্পন্ন হয়েছে।
মাইলমা

4
আপনি একটি শর্টকাটও তৈরি করতে পারেন এবং লক্ষ্য পথে পতাকাটি পাস করতে পারেন।
স্টিফান

1
ওহ, এবং লিঙ্কিত প্রশ্ন থেকে, পতাকা সহ আরম্ভের আগে সমস্ত ক্রোম উইন্ডোজ বন্ধ করে রাখার কথা মনে রাখবেন।
স্টিফান

হ্যাঁ, অন্য একটি বিকল্প এটি প্রকাশের মধ্যে সঠিক অনুমতি সহ একটি ক্রোম এক্সটেনশানকে কোড করতেও পারে: "অনুমতিগুলি": ["ফাইল: // * / *"], স্ট্যাকওভারফ্লো
মিকআল

দ্রষ্টব্য: "ক্রোমের উইন্ডোটি খোলা হওয়ার আগে আপনাকে সমস্ত উইন্ডোটি বন্ধ করতে হবে --allow-file-access-from-files।" উপর বিবৃত হিসাবে stackoverflow.com/a/21771754/325418
nonopolarity

15

এটি সুরক্ষা নিষেধাজ্ঞার কারণেই। পরিবর্তে আপনার ব্যবহার http://বা https://প্রোটোকল প্রয়োজন file:///

আপনার যদি নোডজেএস ইনস্টল করা থাকে তবে আপনি কেবল নিম্নলিখিতটি করতে পারেন। - নোট করুন যে এটি উপলব্ধ অনেক বিকল্পগুলির মধ্যে একটি

স্থানীয়-ওয়েব-সার্ভার ইনস্টল করুন

$ npm install -g local-web-server

এখন আপনি যে কোনও ফোল্ডারে যে সামগ্রীগুলি অ্যাক্সেস করতে চান তা ব্যবহার করতে পারেন http

$ ws

নেভিগেট করুন http://localhost:8000 (ডিফল্ট পোর্ট: 8000)


6

আপনার পোস্টের মতো আমারও একই সমস্যা ছিল। সমাধানটি হ'ল আপনাকে লোকালহোস্ট (ওয়্যাম্প বা জ্যাম্প) দিয়ে চালাতে হবে। এটা হয়ে যাবে।


বাহ, আমি কখনই এটি পেতাম না - ধন্যবাদ! (আমি আশা করি ধন্যবাদ মন্তব্যে অনুমতি দেওয়া হয়েছে)
dcromley


3

স্থানীয় ফাইলের পরিবর্তে HTTP প্রোটোকলের অনুরোধের জন্য আপনার একটি ওয়েব সার্ভারের প্রয়োজন এবং সঠিকভাবে কাজ করুন :)


1
না আপনি না। আপনার ব্রাউজারগুলি এড়ানো উচিত যা ওয়েব স্ট্যান্ডার্ডগুলি কেবল মূলধারার কারণেই অনুসরণ করে না।
টোমা জাটো - মনিকা

3

Chromeফাইলটি লোড করুন তবে এটি চালাতে পারবেন না। ব্যবহার Firefox। এটা আমার জন্য কাজ করছে।


1
আমার ডাউনভোটটি ব্যাখ্যা করার জন্য: এটি কোনও মন্তব্য দিয়ে শুরু করা ভাল, সম্ভবত উত্তর হিসাবে জমা দেওয়ার পরিবর্তে তাদের ব্রাউজার সমর্থন প্রয়োজনীয়তা সম্পর্কে আরও জিজ্ঞাসা করা উচিত। ব্যবহারকারী সম্ভবত ক্রস ব্রাউজার সমর্থন সম্পর্কে যা বলেছে তা প্রদত্ত, এটি সম্ভবত একটি উত্তর নয় বলে মনে হচ্ছে।
টমাস পুল

আপনি যদি প্রশ্নটি মনোযোগ সহকারে পড়ে থাকেন তবে আমি নিশ্চিত যে আপনার ভোট দেওয়ার আগে আপনি তিনটি হিসাবে প্রতিক্রিয়াটি ভোট করবেন না! ব্যবহারকারী বলছেন যে ক্রোম শ্রমিকটিকে লোড করতে পারে না। না, ক্রোম শ্রমিককে লোড করতে পারে তবে চালাতে পারে না। যে কারণে আমি প্রতিক্রিয়া হিসাবে রেখেছি তা প্রথম এক বছর আগে প্রশ্ন জিজ্ঞাসা করা হয়েছিল এবং দ্বিতীয়টি অনেকগুলি প্রতিক্রিয়া বলছে যে ফায়ারফক্স কর্মী চালাচ্ছে না যা আমি তাদের সকলের মন্তব্য করতে পারি না। আমি কেবল ব্যাখ্যা করছি তবে আপনার ভোট বা ভোট দেওয়ার অধিকার আছে।
হোসাইন বেন

3

ক্রোমে স্থানীয় http সার্ভারটি তৈরি করার সহজ উপায় হ'ল এই অ্যাপ্লিকেশন:

ক্রোমের জন্য ওয়েব সার্ভার

https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related

বর্ণনা:

ক্রোমের জন্য একটি ওয়েব সার্ভার, HTTP ব্যবহার করে নেটওয়ার্কের মাধ্যমে স্থানীয় ফোল্ডার থেকে ওয়েব পৃষ্ঠাগুলি সরবরাহ করে। অফলাইন চালায়। ক্রোমের জন্য ওয়েব সার্ভার ক্রোমের জন্য একটি ওপেন সোর্স (এমআইটি) HTTP সার্ভার।

এটি আপনার Chrome ইনস্টল থাকা যে কোনও জায়গায় চলে তাই আপনি এটিকে যে কোনও জায়গায় নিতে পারবেন। এমনকি এটি এআরএম ক্রোমবুকগুলিতেও কাজ করে।

এটিতে এখন স্থানীয় নেটওয়ার্কে শোনার বিকল্প রয়েছে, যাতে অন্যান্য কম্পিউটারগুলি আপনার ফাইলগুলি অ্যাক্সেস করতে পারে। অতিরিক্তভাবে, এটি চেষ্টা করে একটি ইন্টারনেট ঠিকানা পেতে পারে।

অনেকগুলি ক্রোমবুকে বেসিক ওয়েব বিকাশ করতে এটি ব্যবহার করে। এটি কম্পিউটার বা এমনকি ইন্টারনেটের মধ্যে স্থানীয় নেটওয়ার্কের মধ্যে ফাইল ভাগ করে নেওয়ার পক্ষেও কার্যকর।

এটি ইনস্টল হয়ে গেলে, http://127.0.0.1:8887 এ নেভিগেট করুন

এবং এটি পতাকা হিসাবে - ফাইল-অ্যাক্সেস-থেকে-ফাইল হিসাবে অনিরাপদ নয়


এটা চমৎকার! আমি এখন স্থানীয় ফাইল সিস্টেমের ওয়েব কর্মীদের সাথে আমার রিএ্যাকটিজেএস অ্যাপটি চালাতে পারি। খুব সহজ হতে পারে না!
জেসন

3

এটি উপরে থমাস উত্তর দ্বারা অনুপ্রাণিত। তবে একটি সতর্কতার সাথে আমি কেবলমাত্র এইচটিএমএল বিতরণ করতে চেয়েছিলাম, তাই আমি ম্যানুয়ালি ডেটা URL এ রূপান্তরিত করেছি । এবং এতে ডেটা ইউআরএল চেক বক্স সক্ষম করে।

const myWorker = new Worker("data:application/x-javascript;base64,b25tZXNzYW...");


2

পাইথন ২.x পাইথন ৩.x এর চেয়ে বেশি বিস্তৃত হয়ে থাকে, এরকম কিছু python -m SimpleHTTPServer 8000 কিছু সাধারণভাবে প্রযোজ্য এবং কেবল ম্যাক ওএস এক্সের জন্য নয় I আমি সাইগউইনের অধীনে ব্যবহারের জন্য এটি প্রয়োজনীয় বলে মনে করি।

সেই জায়গায়, এই উদাহরণটি চ্যাম্পের মতো কাজ করেছিল।


2
function worker_fun(num){
    num ++
    // console.log(num)
    postMessage(num);
    setTimeout(worker_fun.bind(null,num), 500)
}

var w

function startWorker(){
    var blob = new Blob([
        "onmessage = function(e){\
            " + worker_fun.toString() + "\
            worker_fun(e.data.num);}"
    ]);
    var blobURL = window.URL.createObjectURL(blob);
    if (typeof(Worker) != 'undefined'){
        if (typeof(w) == 'undefined'){

            w = new Worker(blobURL);
            w.onmessage = function(event){
                document.getElementById('num').innerHTML = event.data;
            } 
            w.postMessage({
               num:parseInt(document.getElementById('num').innerHTML)})
        }
    }
}


function stopWorker() { 
    w.terminate();
    w = undefined;
}

উল্লিখিত ক্রোম এটি সমর্থন করে না। আমি একই ফাইলটিতে আমার কর্মীদের সংজ্ঞায়িত করতে চাই। এটি একটি কার্যক্ষম কাজ যা উপাদানটির অন্তর্নিহিত এইচটিএমএলে পাওয়া প্রতিটি সংখ্যা id=numপ্রতি 500ms সহ বৃদ্ধি করবে ।


1

সম্ভবত একটি কারণ হ'ল কোনও স্থানীয় ফাইল থেকে স্ক্রিপ্ট চালানোর সময় ক্রোম আপনাকে ওয়েব কর্মী লোড করতে দেয় না। এবং আমি আমার ফায়ারফক্সে কোড চালানোর চেষ্টা করি না, পারে না।


file://ফায়ারফক্স ৫১.০.১
bryc

-6

হ্যাঁ, আপনি যদি স্থানীয় ফাইল লোড করে থাকেন তবে এটি কোরোমে কাজ করবে না। তবে এটি ফায়ারফক্স ব্রাউজারে কাজ করবে। এবং আপনাকে এইচটিএমএল ফাইলের নীচে কোড যুক্ত করতে হবে।

<head>
    <meta charset="UTF-8" />
</head>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.