এক্সএমএলএইচটিপিআরকিউয়েস্ট উত্স নাল ফাইল / /// ফাইলের জন্য অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স অনুমোদিত নয়: /// (সার্ভারলেস)


209

আমি এমন একটি ওয়েবসাইট তৈরি করার চেষ্টা করছি যা এর সূচক ফাইলটি চালু করে স্থানীয়ভাবে ডাউনলোড এবং চালানো যায়।

সমস্ত ফাইল স্থানীয়, কোনও সংস্থান অনলাইনে ব্যবহৃত হয় না।

আমি যখন এক্সএসএল টেমপ্লেট (উপ ডিরেক্টরিতে) সহ কোনও এক্সএমএল ফাইল প্রক্রিয়া করতে jQuery এর জন্য AJAXSLT প্লাগইনটি ব্যবহার করার চেষ্টা করি, আমি নিম্নলিখিত ত্রুটিগুলি পেয়েছি:

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/data/home.xml. Origin null is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/assets/xsl/main.xsl. Origin null is not allowed by Access-Control-Allow-Origin.

অনুরোধ করা সূচক ফাইলটি file:///C:/path/to/XSL%20Website/index.htmlব্যবহৃত জাভাস্ক্রিপ্ট ফাইলগুলিতে সংরক্ষণ করা হয় file:///C:/path/to/XSL%20Website/assets/js/

এই সমস্যাটি সমাধান করতে আমি কীভাবে পারি?

উত্তর:


177

উদাহরণস্বরূপ যেখানে স্থানীয় ওয়েবসার্ভার চালানো কোনও বিকল্প নয়, আপনি file://ব্রাউজার সুইচের মাধ্যমে Chrome এ ফাইলগুলিতে অ্যাক্সেসের অনুমতি দিতে পারেন। কিছু খনন করার পরে, আমি এই আলোচনাটি পেয়েছি , যা খোলার পোস্টে একটি ব্রাউজার সুইচ উল্লেখ করেছে। আপনার ক্রোম উদাহরণটি এর সাথে চালান:

chrome.exe --allow-file-access-from-files

এটি বিকাশের পরিবেশগুলির জন্য গ্রহণযোগ্য হতে পারে তবে অন্য কিছু নয়। আপনি অবশ্যই সব সময় এটি চান না। এটি এখনও একটি মুক্ত সমস্যা হিসাবে দেখা যাচ্ছে (জানুয়ারী ২০১১ পর্যন্ত)

আরও দেখুন: Chrome এ স্থানীয় ফাইলগুলি ব্যবহার করে jQuery getJSON নিয়ে সমস্যা


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


1
ধন্যবাদ, আমি ভাবছিলাম আমি কোথায় ভুল কোডিং করেছি, মনে হচ্ছে ব্রাউজারটিই সমস্যা।
আরদা

4
কোনও কারণ আছে - ফাইল-অ্যাক্সেস-থেকে-ফাইল-ফাইলগুলি সমস্যার সমাধান করবে না। আমি কেবল so .getScript ("application.js") এর মতো একটি স্ক্রিপ্ট ফাইল লোড করার চেষ্টা করছি; এবং প্রশ্নটিতে বর্ণিত ত্রুটিটি পান।
Denzo

1
এটি কাজ করে, তবে "কমান্ডটি কার্যকর করার আগে আপনার সমস্ত ক্রোম উইন্ডো বন্ধ আছে এবং অন্যথায় চলছে না তা নিশ্চিত করুন Or ফাইল "" ( stackoverflow.com/a/4208455/1272428 )
rluks

87

মূলত এর সাথে মোকাবিলা করার একমাত্র উপায় হ'ল লোকালহোস্টে একটি ওয়েবসভার চালু এবং সেখান থেকে সেগুলি দেওয়া।

এটি একটি ব্রাউজারের আপনার কম্পিউটারের তে যেকোনো ফাইল অ্যাক্সেস করতে একটি AJAX অনুরোধ করার অনুমতি জন্য সুরক্ষিত নয়, অতএব অধিকাংশ ব্রাউজার আচরণ বলে মনে হচ্ছে "ফাইল: //" "এর কর্মের জন্য কোনো উৎপত্তি তার হিসাবে অনুরোধ একই অরিজিন নীতি "

ওয়েবসভার শুরু করা তত তুচ্ছ হতে পারে cd করা ফাইলগুলি যে ডিরেক্টরিতে এবং চলমান থাকে সেগুলিতে প্রবেশের :

python -m SimpleHTTPServer

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

5
কেবলমাত্র অন্য একটি সমাধান যা আমি ভাবতে পারি তা হ'ল সম্পূর্ণ জিনিসটি একটি একক পৃষ্ঠায় লোড করা যাতে আপনার ফাইল সিস্টেমে কোনও এজাক্স অনুরোধ করার প্রয়োজন না হয়।
একক

2
আপনাকে ধন্যবাদ @ সিঙ্গেলটেড! আমি আপনার সমাধানটি ব্যবহার করছি এবং এটি খুব সহজ!
হেন্ডি ইরাওয়ান

4
এবং যদি আপনি পাইথন 3 ব্যবহার করেন, কমান্ডটি হবে python -m http.server
অ্যালেক্সেরসেট

4

ওএসএক্স / ক্রোম ডিভাইসগুলির জন্য, এখানে - ফাইল-অ্যাক্সেস-থেকে-ফাইল-সুইচ চালু করে ক্রোমটি চালু করবে এমন একটি অ্যাপ্লস্ক্রিপ্ট রয়েছে:

set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"    
set switch to " --allow-file-access-from-files"
do shell script (quoted form of chromePath) & switch & " > /dev/null 2>&1 &"

14
আপনি শুধু ব্যবহার করতে পারেন খোলা (1) পতাকা যোগ করার জন্য: open -a 'Google Chrome' --args --allow-file-access-from-files
জোশ লি

4

এই সমাধানটি আপনাকে jQuery.getScript () ব্যবহার করে স্থানীয় স্ক্রিপ্ট লোড করতে দেয়। এটি একটি বিশ্বব্যাপী সেটিং তবে আপনি প্রতি অনুরোধের ভিত্তিতে ক্রসডোমাইন বিকল্পটিও সেট করতে পারেন।

$.ajaxPrefilter( "json script", function( options ) {
  options.crossDomain = true;
});

একটি স্থানীয় এইচটিএমএল ফাইল থেকে একটি স্থানীয় জেএস ফাইল লোড করার জন্য একটি মন্ত্রীর মতো কাজ করেছে! ধন্যবাদ, ঠিক আমার যা দরকার ছিল।
ব্যবহারকারী 1577390

4

স্থানীয় ফাইলটি খোলার জন্য জাভাস্ক্রিপ্ট ফাইলরেডার ফাংশনটি ব্যবহার করার বিষয়ে কী?

<input type="file" name="filename" id="filename">
<script>
$("#filename").change(function (e) {
  if (e.target.files != undefined) {
    var reader = new FileReader();
    reader.onload = function (e) {
        // Get all the contents in the file
        var data = e.target.result; 
        // other stuffss................            
    };
    reader.readAsText(e.target.files.item(0));
  }
});
</script>

এখন Choose fileবোতামটি ক্লিক করুন এবং ফাইল ব্রাউজ করুনfile:///C:/path/to/XSL%20Website/data/home.xml


3

এই বিধিনিষেধকে অতিক্রম করতে ক্রোমটি আরম্ভ করুন: open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files

জোশ লির মন্তব্য থেকে প্রাপ্ত তবে আমার গুগল ক্রোমের পুরো পথটি নির্দিষ্ট করা দরকার যাতে আমার উইন্ডোজ পার্টিশন (সমান্তরালে) থেকে গুগল ক্রোম খোলার এড়াতে পারে।


2

আমি যেভাবে এটি ঘিরে কাজ করেছি তা হ'ল এক্সএমএলএইচটিপিআরকিউস্ট ব্যবহার করা নয়, পরিবর্তে একটি পৃথক জাভাস্ক্রিপ্ট ফাইলে প্রয়োজনীয় ডেটা অন্তর্ভুক্ত করা উচিত। (আমার ক্ষেত্রে আমার https://github.com/kripken/sql.js/ এর সাথে ব্যবহার করার জন্য একটি বাইনারি এসকিউএলাইট ব্লব দরকার )

আমি নামক একটি ফাইল তৈরি করেছি base64_data.js(এবং btoa()আমার প্রয়োজনীয় ডেটা রূপান্তর করতে ব্যবহৃত হত এবং এটি aোকানো হত <div>যাতে আমি এটি অনুলিপি করতে পারি)।

var base64_data = "U1FMaXRlIGZvcm1hdCAzAAQA ...<snip lots of data> AhEHwA==";

এবং তারপরে এইচটিএমএলে ডেটাগুলি সাধারণ জাভাস্ক্রিপ্টের মতো অন্তর্ভুক্ত করে:

<div id="test"></div>

<script src="base64_data.js"></script>
<script>
    data = atob(base64_data);
    var sqldb = new SQL.Database(data);
    // Database test code from the sql.js project
    var test = sqldb.exec("SELECT * FROM Genre");
    document.getElementById("test").textContent = JSON.stringify(test);
</script>

আমি ভাবছি এটি JSON পড়ার জন্য এটি সংশোধন করা তুচ্ছ হবে, এমনকি এটি এক্সএমএলও; আমি পাঠকের জন্য অনুশীলন হিসাবে ছেড়ে দেব;)


1

আপনি নির্বাণ চেষ্টা করতে পারেন 'Access-Control-Allow-Origin':'*'মধ্যে response.writeHead(, {[here]})


6
রেসপন্স.লিখন কোথা থেকে আসে, আমি এটিকে কীভাবে বলব এবং কোথায়? আপনি আরও উদাহরণ দিতে পারেন? মনে রাখবেন এটি একটি স্থানীয় ফাইল সিস্টেম যা সার্ভার নয়। আমার বুঝতে হবে যে মানটি কেবল কোনও সার্ভার থেকে সেট করা যায়?
জোসেফ আস্ট্রাহান

0

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

যদি এটি আপনাকে ফাইলে না নিয়ে যায় তবে ফাইলের নামটি উরসটিতে যুক্ত করুন। এটার মত:

   https://127.0.0.1:8887/fileName.txt

ক্রোমের জন্য ওয়েব সার্ভারে লিঙ্ক: আমাকে ক্লিক করুন

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