প্রথমে চালানো / আপডেটের ক্রোম এক্সটেনশন সনাক্ত করুন


98

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


তুমি কেন এটিকে বেছে নিলে না? stackoverflow.com/a/14957674/4548520 ইনস্টল প্রথম এক্সটেনশানটির অফিসিয়াল ইভেন্টে - এটা অধিকার anwser এর
user25

উত্তর:


178

ক্রোমের নতুন সংস্করণগুলিতে (যেহেতু ক্রোম 22), আপনি chrome.runtime.onInstalledইভেন্টটি ব্যবহার করতে পারেন যা অনেক বেশি পরিষ্কার।

উদাহরণ:

// Check whether new version is installed
chrome.runtime.onInstalled.addListener(function(details){
    if(details.reason == "install"){
        console.log("This is a first install!");
    }else if(details.reason == "update"){
        var thisVersion = chrome.runtime.getManifest().version;
        console.log("Updated from " + details.previousVersion + " to " + thisVersion + "!");
    }
});

4
এই জন্য আপনাকে ধন্যবাদ! আমি ইন্টারনেটের আশেপাশে যা কিছু পেয়েছি তা হল এক্সটেনশনের সংস্করণটি লোকাল স্টোরেজে সংরক্ষণ করা যতক্ষণ না অবশেষে আমি এই উত্তরটি পেরিয়ে যাব, যা অবশ্যই একটি কার্যক্ষম সমাধান ছিল, তবে আমি এত অবাক হয়েছিল যে এর জন্য ক্রোমের কিছু অন্তর্নির্মিত ছিল না! আমি খুব খুশি যে আমাকে নামানো হয়নি :)
জেএমটাইলার

4
যেহেতু ক্রোম 22, সেপ্টেম্বর 2012-এ প্রকাশিত হয়েছে
রেডজার্ফ

4
chrome.runtime.on অ্যাপ্লিকেশন বা এক্সটেনশানটি পটভূমিতে ইনস্টল হওয়ার পরে ইনস্টল করা সনাক্ত করে। এটি যা না করে তা হ'ল ক্রোম.এপ.আরটাইম.অনল্যাঞ্চ করা ইভেন্টের প্রথম গুলি চালানো ...
realkstrawn93

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

4
@ এলিমে ক্রোমের বাগের মতো মনে হচ্ছে আপনার বাগ ট্র্যাকারে রিপোর্ট করা উচিত।
অ্যালভিন ওয়াং

72

ম্যানিফেস্টের v3 প্রতিবিম্বিত আপডেট উত্তর:

ক্রোমিয়ামে এখন এপিআই- এর একটি ক্রোম.আরুনটাইম সেট রয়েছে যা আপনাকে এক্সটেনশানের সংস্করণ আনতে দেয়।

বর্তমান সংস্করণটি পেতে:

chrome.runtime.getManifest().version

যখন এক্সটেনশানটি প্রথম ইনস্টল করা হয়েছে তখন যখন এক্সটেনশানটি কোনও নতুন সংস্করণে আপডেট হবে এবং যখন ক্রোমিয়ামটি নতুন সংস্করণে আপডেট হয় তখন আপনি onInstalledইভেন্টটি ব্যবহার করতে পারেন listen

chrome.runtime.onInstalled.addListener((details) => {
   const currentVersion = chrome.runtime.getManifest().version
   const previousVersion = details.previousVersion
   const reason = details.reason

   console.log('Previous Version: ${previousVersion }')
   console.log('Current Version: ${currentVersion }')

   switch (reason) {
      case 'install':
         console.log('New User installed the extension.')
         break;
      case 'update':
         console.log('User has updated their extension.')
         break;
      case 'chrome_update':
      case 'shared_module_update':
      default:
         console.log('Other install events within the browser')
         break;
   }

})

এখানেই শেষ!


পুরানো উত্তর, 2011 এর আগে

আপনি যদি এক্সটেনশনটি ইনস্টল করেছেন বা আপডেট হয়েছে কিনা তা পরীক্ষা করতে চান, আপনি এই জাতীয় কিছু করতে পারেন:

  function onInstall() {
    console.log("Extension Installed");
  }

  function onUpdate() {
    console.log("Extension Updated");
  }

  function getVersion() {
    var details = chrome.app.getDetails();
    return details.version;
  }

  // Check if the version has changed.
  var currVersion = getVersion();
  var prevVersion = localStorage['version']
  if (currVersion != prevVersion) {
    // Check if we just installed this extension.
    if (typeof prevVersion == 'undefined') {
      onInstall();
    } else {
      onUpdate();
    }
    localStorage['version'] = currVersion;
  }

আমি যদি জিমেইলে কোনও সামগ্রী স্ক্রিপ্টে getVersion () চালনা করি তবে আমি Gmail অ্যাপ্লিকেশন সংস্করণটির নম্বর পাই। আমার বেশ কয়েকটি সমস্যা রয়েছে যা এই ধরণের স্ক্রিপ্টটি কাজ করা থেকে বিরত রাখবে: ক) আপনি যখন কোনও প্লাগইন ইনস্টল করেন, যা কোনও পৃষ্ঠাতে একটি সামগ্রীর স্ক্রিপ্ট ইনজেক্ট করা দরকার, এবং পৃষ্ঠাটি ইতিমধ্যে লোড করা হয়েছে, সামগ্রী স্ক্রিপ্টটি করে পৃষ্ঠায় ইনজেকশন না পাওয়া, পৃষ্ঠাটি আবার লোড করতে হবে)। খ) প্লাগইনটির সংস্করণ নম্বর পাওয়া ব্যাকগ্রাউন্ড স্ক্রিপ্ট থেকে করা যেতে পারে, তবে ব্যাকগ্রাউন্ড স্ক্রিপ্টটি লোকাল স্টোরেজ অ্যাক্সেস করতে পারে না, কেবলমাত্র সামগ্রী লিখিত স্ক্রিপ্ট পারে যা এখনও লোড হয়নি ...
ভিক্টর এস

4
এই পোস্টটি দুর্দান্ত ... আপনার উত্তরটি হিসাবে চিহ্নিত করা উচিত। ধন্যবাদ মোহাম্মদ!
frenetix

4
উপরের @ ভিক্টরসটি ব্যাকগ্রাউন্ড পৃষ্ঠার মধ্যে ব্যবহারের উদ্দেশ্যে, যদি আপনার কোনও বিষয়বস্তু স্ক্রিপ্টে এটি ব্যবহারের পরিকল্পনা করা হয় তবে কেবল chrome.app.getDetails ()। সংস্করণটি সরাসরি কল করুন। এর আগে কেন আমি ভার্সনটি পেয়েছি কারণ ক্রোম এক্সটেনশান বিকাশের প্রথম দিনগুলিতে কোনও ক্রোম.এপ অবজেক্ট ছিল না, সুতরাং আমাদের এক্সএফআরটি এক্সএইচআর করতে হয়েছিল। আপনি একটি ক্লোজারে এই সমস্ত করতে পারেন যাতে আপনি আপনার কলিংকে সঠিক পদ্ধতিটির গ্যারান্টি দিতে পারেন। আমি সাধারণত একটি ক্লাস অবজেক্টে সবকিছু আবদ্ধ করি।
মোহাম্মদ মনসুর

4
দুর্দান্ত, এটি আমার পক্ষে কাজ করেছে। নোট করুন যে উপরের কোডটিতে একটি অর্ধবৃত্ত অনুপস্থিত, এবং "অপরিজ্ঞাত" কোট থাকা উচিত নয়।
এমপিআইসট

@mpoisot দুঃখিত, আপনি "অপরিজ্ঞাত" সম্পর্কে ভুল। (আমি জানি আমি এই পার্টিতে খুব দেরি করেছি তবে অন্যদের জন্য যারা আমার মতো এখানে হোঁচট খাচ্ছেন তাদের পক্ষে এটি গুরুত্বপূর্ণ হতে পারে।) তিনি চেক করার চেষ্টা করছেন নাprevVersion == 'undefined' ... তিনি যাচাই করছেন typeof prevVersion == 'undefined'। এটা অনেক আরো জোরালো হয় ব্যবহার করতে typeofযখন একটি পরিবর্তনশীল undefined হয় পরীক্ষা করা হচ্ছে ... এখানে দেখতে কেন শিখতে stackoverflow.com/a/3550319/130691
JMTyler

20

ভাগ্যক্রমে, এখন ঘটনা আছে জন্য (ক্রোম সংস্করণ 22, এবং আপডেট ইভেন্টের জন্য 25)।

ইনস্টলড ইভেন্টের জন্য:

chrome.runtime.onInstalled.addListener(function() {...});

অন-আপডেট উপলভ্য ইভেন্টের জন্য:

chrome.runtime.onUpdateAvailable.addListener(function() {...});

বিকাশকারী দস্তাবেজগুলি থেকে অনউপেটে উপলব্ধ সম্পর্কে একটি গুরুত্বপূর্ণ অংশ বলেছেন:

আপডেট উপলভ্য হলে ফায়ার করা হয়েছে, তবে তত্ক্ষণাত ইনস্টল করা হয়নি কারণ বর্তমানে অ্যাপটি চলছে is আপনি যদি কিছু না করেন তবে পরবর্তী সময় ব্যাকগ্রাউন্ড পৃষ্ঠাটি লোড হওয়ার পরে আপডেটটি ইনস্টল হয়ে যাবে, আপনি যদি এটি ইনস্টল করতে চান তাড়াতাড়ি আপনি chrome.runtime.reload () এ কল করতে পারেন।


9

সরল। যখন এক্সটেনশনটি প্রথম চালিত হয় তখন thelocalStorage তা খালি থাকে। প্রথম রান করার পরে, ফলস্বরূপ সমস্ত ফলাফল রান না করে চিহ্নিত করতে আপনি সেখানে একটি পতাকা লিখতে পারেন।

পটভূমিতে উদাহরণ, htm:

var first_run = false;
if (!localStorage['ran_before']) {
  first_run = true;
  localStorage['ran_before'] = '1';
}

if (first_run) alert('This is the first run!');

সম্পাদনা: এক্সটেনশনটি সবেমাত্র আপডেট হয়েছে কিনা তা যাচাই করতে, প্রথম রান করার সময় সাধারণ পতাকার পরিবর্তে সংস্করণটি সংরক্ষণ করুন, তারপরে যখন বর্তমান এক্সটেনশন সংস্করণটি ( XmlHttpRequestম্যানিফেস্টটি ইঙ্গিত করে এটি অর্জন করুন ) সঞ্চিত মানের সাথে সমান হয় না localStorage, এক্সটেনশনটি আপডেট করা হয়েছে।


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

প্যাকেজযুক্ত অ্যাপ্লিকেশনগুলির জন্য, এটি পটভূমি অ্যাপ্লিকেশনগুলির localStorageনিজস্ব পৃথক উইন্ডোতে রয়েছে এবং পাতায় অন্য কোড এবং এক্সটেনশানগুলির সাথে @ হুইজের উল্লেখ অনুসারে ভাগ করে নেওয়া না হওয়ায় এটি ব্যাকগ্রাউন্ড পৃষ্ঠাগুলিতে ব্যবহারের জন্য একটি নির্দিষ্ট সমাধান । এক্সটেনশনের ক্ষেত্রে, তবে এটি ক্ষেত্রে নয়।
realkstrawn93

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