ক্রোম এক্সটেনশন: সামগ্রী স্ক্রিপ্টে স্থানীয় স্টোরেজ অ্যাক্সেস করা


157

আমার একটি বিকল্প পৃষ্ঠা রয়েছে যেখানে ব্যবহারকারী নির্দিষ্ট বিকল্পগুলি সংজ্ঞায়িত করতে পারে এবং এটি স্থানীয় স্টোরেজে এটি সংরক্ষণ করে: options.html

এখন, আমার কাছে একটি সামগ্রীর স্ক্রিপ্টও রয়েছে যা options.htmlপৃষ্ঠাতে সংজ্ঞায়িত বিকল্পগুলি পাওয়া দরকার , তবে যখন আমি বিষয়বস্তু স্ক্রিপ্ট থেকে লোকালস্টোরেজ অ্যাক্সেস করার চেষ্টা করি তখন এটি বিকল্প পৃষ্ঠা থেকে মানটি ফিরিয়ে দেয় না।

আমি কীভাবে আমার বিষয়বস্তু স্ক্রিপ্টকে স্থানীয় স্টোরেজ থেকে বিকল্পগুলি পৃষ্ঠা বা ব্যাকগ্রাউন্ড পৃষ্ঠা থেকে মান পেতে পারি?




সম্পর্কিত: stackoverflow.com/questions/39768005/...
super1ha1

উত্তর:


233

২০১ 2016 আপডেট করুন:

গুগল ক্রোম স্ট্রিজ এপিআই প্রকাশ করেছে: http://developer.chrome.com/extensions/storage.html

অন্যান্য ক্রোম এপিআইয়ের মতো এটি ব্যবহার করা বেশ সহজ এবং আপনি Chrome এর মধ্যে যে কোনও পৃষ্ঠার প্রসঙ্গ থেকে এটি ব্যবহার করতে পারেন।

    // Save it using the Chrome extension storage API.
    chrome.storage.sync.set({'foo': 'hello', 'bar': 'hi'}, function() {
      console.log('Settings saved');
    });

    // Read it using the storage API
    chrome.storage.sync.get(['foo', 'bar'], function(items) {
      message('Settings retrieved', items);
    });

এটি ব্যবহার করতে, আপনি এটি ম্যানিফেস্টে সংজ্ঞায়িত করেছেন তা নিশ্চিত করুন:

    "permissions": [
      "storage"
    ],

"অপসারণ", "পরিষ্কার", "getBytesInUse", এবং পরিবর্তিত স্টোরেজ "অন চেঞ্জড" শোনার জন্য ইভেন্ট শ্রোতার এমন পদ্ধতি রয়েছে

নেটিভ লোকালস্টোরেজ ব্যবহার করে ( ২০১১ সালের পুরানো জবাব )

সামগ্রী স্ক্রিপ্টগুলি ওয়েবপৃষ্ঠাগুলির প্রসঙ্গে চালিত হয়, এক্সটেনশন পৃষ্ঠাগুলি নয়। অতএব, আপনি যদি নিজের সামগ্রীর স্ক্রিপ্ট থেকে লোকাল স্টোরেজ অ্যাক্সেস করেন তবে এটি সেই ওয়েবপৃষ্ঠা থেকে স্টোরেজ হবে, এক্সটেনশন পৃষ্ঠা স্টোরেজ নয়।

এখন, আপনার সামগ্রীর স্ক্রিপ্টটি আপনার এক্সটেনশন স্টোরেজটি পড়তে দেয় (যেখানে আপনি এগুলি আপনার বিকল্প পৃষ্ঠা থেকে সেট করেছেন), আপনাকে এক্সটেনশন বার্তা পাসিং ব্যবহার করতে হবে ।

আপনি প্রথমে যা করেন তা আপনার সামগ্রী স্ক্রিপ্টকে কিছু विस्तार আনতে আপনার এক্সটেনশনে একটি অনুরোধ প্রেরণ করতে বলা হয় এবং সেই ডেটাটি আপনার স্থানীয় সম্প্রচারের স্টোরেশন হতে পারে:

contentscript.js

chrome.runtime.sendMessage({method: "getStatus"}, function(response) {
  console.log(response.status);
});

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getStatus")
      sendResponse({status: localStorage['status']});
    else
      sendResponse({}); // snub them.
});

আপনার সামগ্রীর স্ক্রিপ্টে জেনেরিক লোকালস্টোরেজ ডেটা পেতে, বা সম্ভবত, পুরো স্থানীয় স্টোরেজ অ্যারে পেতে আপনি তার চারপাশে একটি এপিআই করতে পারেন।

আমি আশা করি এটি আপনার সমস্যার সমাধান করতে সহায়তা করেছে।

অভিনব এবং জেনেরিক হতে ...

contentscript.js

chrome.runtime.sendMessage({method: "getLocalStorage", key: "status"}, function(response) {
  console.log(response.data);
});

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getLocalStorage")
      sendResponse({data: localStorage[request.key]});
    else
      sendResponse({}); // snub them.
});

1
স্পষ্টতই, অনুরোধটি {পদ্ধতি: 'getStorage', কী: 'স্থিতি'} এবং শ্রোতার সাথে সম্পর্কিত ডেটাতে প্রতিক্রিয়া জানাতে পারে।
জেসি ইনাসিও

আমি কী চাই যদি লোকালস্টোর থেকে সমস্ত কিছু এক্সটেনশনে স্থানান্তরিত হয়? আমি কি লিখতে পারি sendResponse({data: localStorage});?
বিভাস দেবনাথ

আমি কিছুটা বিভ্রান্ত আমি আমার বিকল্প পৃষ্ঠা থেকে ডেটা ব্যাকগ্রাউন্ড html পৃষ্ঠায় উপলভ্য হতে চাই .. সুতরাং আমি ব্যাকগ্রাউন্ড পৃষ্ঠা থেকে বিষয়বস্তুতে একটি অনুরোধ করব? এবং বিষয়বস্তুতে লোকাল স্টোরেজ ডেটা ফেরত পাঠানো যাবে? এটি দেখুন -> পেস্টবিন . com/xtFexFtc .. আমি কি ঠিক এটি করছি?
বিভাস দেবনাথ

7
পটভূমি পৃষ্ঠা এবং বিকল্প পৃষ্ঠা একই এক্সটেনশন প্রসঙ্গে অন্তর্ভুক্ত, সুতরাং আপনার লিখিত সামগ্রীর স্ক্রিপ্ট বা বার্তা প্রয়োজন হবে না। আপনি localStorageঅপশন পৃষ্ঠা থেকে সরাসরি কল করতে পারেন বা বিকল্প পৃষ্ঠা chrome.extension.getBackgroundPageথেকে ব্যবহার করতে পারেন ।
মোহাম্মদ মনসুর

1
এটা অদ্ভুত. আমি বিকল্প পৃষ্ঠায় কয়েকটি বিকল্প সেট করছি এবং পটভূমির পৃষ্ঠায় তাদের ভিত্তিতে প্রসঙ্গ মেনু তৈরি করছি। জিনিসটি হ'ল, যদি আমি বিকল্প পৃষ্ঠা থেকে লোকালস্টোরারে কোনও পরিবর্তনশীল সেট করি তবে তা অবিলম্বে পটভূমির পৃষ্ঠায় প্রতিফলিত হবে না (যেমন কোনও নতুন প্রসঙ্গমেনু নয়), যদি না আমি এক্সটেনশানটি অক্ষম করে এবং পুনরায় সক্ষম করি না। কোন কারণ আপনি ভাবতে পারেন?
বিভাস দেবনাথ

47

কখনও কখনও chrome.stores এপিআই ব্যবহার করা ভাল । লোকালস্টোরেজের পরে এটি আরও ভাল কারণ আপনি এটি করতে পারেন:

এখানে একটি সহজ কোড যা ক্রোম.স্টোরেজ ব্যবহার দেখায়। সামগ্রী স্ক্রিপ্টটি পরিদর্শন করা পৃষ্ঠা এবং টাইমস্ট্যাম্পের ইউআরএল পায় এবং এটি সংরক্ষণ করে, পপআপ.জেএস এটি স্টোরেজ অঞ্চল থেকে পায়।

content_script.js

(function () {
    var visited = window.location.href;
    var time = +new Date();
    chrome.storage.sync.set({'visitedPages':{pageUrl:visited,time:time}}, function () {
        console.log("Just visited",visited)
    });
})();

popup.js

(function () {
    chrome.storage.onChanged.addListener(function (changes,areaName) {
        console.log("New item in storage",changes.visitedPages.newValue);
    })
})();

"পরিবর্তনগুলি" এখানে একটি অবজেক্ট যা প্রদত্ত কীটির জন্য পুরানো এবং নতুন মান ধারণ করে। "এরিয়ামনেম" যুক্তিটি 'স্থানীয়', 'সিঙ্ক' বা 'পরিচালিত' সঞ্চয় স্থানের নাম বোঝায়।

ম্যানিফেস্ট.জসনে স্টোরেজ অনুমতি ঘোষণা করতে ভুলবেন না।

manifest.json টি

...
"permissions": [
    "storage"
 ],
...

onChangedইভেন্ট ইতিমধ্যেই ডেটা উপলব্ধ changesবস্তু। উপরন্তু, বিশেষ মনোযোগ দিতে namespaceএর onChangedইভেন্ট। আপনি যদি কিছু ব্যবহার করে সঞ্চয় করেন chrome.storage.local.setতবে onChangedইভেন্টটি ট্রিগার হয়ে উঠেছে , তবে ব্যবহার করে পড়া chrome.storage.sync.getকিছুটা অর্থপূর্ণ নয়।
রব ডাব্লু

হ্যাঁ আপনি ঠিক বলেছেন, আমার উত্তর সম্পাদনা করেছেন। স্পষ্টতই আপনি অন্যান্য পরিস্থিতিতে chrome.storage.sync.get ব্যবহার করতে পারেন, তবে এখানে এটি নিরর্থক।
পাভেল মিচ

আপনার উত্তরের বিষয়ে পুনর্বিবেচনা 5 জবাবে: changes.visitedPagesযদি অনির্দিষ্ট করা হবে না visitedPagesপরিবর্তন করা হয় নি। if (changes.visitedPages) { ... }এই সমস্যাটি সমাধান করতে লাইনটি মোড়ানো ।
রব ডব্লু

7

আর একটি বিকল্প হ'ল ক্রোমস্টোরেজ এপিআই ব্যবহার করা। এটি অধিবেশনগুলিতে alচ্ছিক সিঙ্কের সাথে ব্যবহারকারীর ডেটা সংরক্ষণের অনুমতি দেয়।

একটি খারাপ দিক হ'ল এটি অ্যাসিনক্রোনাস।

https://developer.chrome.com/extensions/storage.html


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