<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: younesbenallal</title>
    <description>The latest articles on DEV Community by younesbenallal (@younesbenallal).</description>
    <link>https://dev.to/younesbenallal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F316121%2Fbbde94ae-715c-4c3f-b737-edb8c06aef0e.jpeg</url>
      <title>DEV Community: younesbenallal</title>
      <link>https://dev.to/younesbenallal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/younesbenallal"/>
    <language>en</language>
    <item>
      <title>How to make a Web App and a Chrome Extension communicate using Manifest V3</title>
      <dc:creator>younesbenallal</dc:creator>
      <pubDate>Fri, 18 Aug 2023 22:06:50 +0000</pubDate>
      <link>https://dev.to/younesbenallal/how-to-communicate-between-a-web-app-and-a-chrome-extension-using-manifest-v3-9bf</link>
      <guid>https://dev.to/younesbenallal/how-to-communicate-between-a-web-app-and-a-chrome-extension-using-manifest-v3-9bf</guid>
      <description>&lt;p&gt;Chrome's Manifest V3 has introduced a refined approach to communication between web apps and Chrome extensions. This update brings forward the use of &lt;code&gt;chrome.runtime.sendMessage&lt;/code&gt;, replacing the traditional &lt;code&gt;postMessage&lt;/code&gt;. Notably, Manifest V2 is no longer available. In this guide, we'll explore the straightforward process of adapting to this change and facilitating seamless communication between your web app and Chrome extension.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Setup Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TypeScript Support:&lt;/strong&gt;&lt;br&gt;
If you're using TypeScript, install &lt;code&gt;@types/chrome&lt;/code&gt; for proper type support of Chrome APIs. This ensures smooth development and fewer errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Manifest Configuration:&lt;/strong&gt;&lt;br&gt;
In your extension's manifest file, include your web app's URL in the &lt;code&gt;externally_connectable&lt;/code&gt; field. This establishes a secure channel for communication.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Sending Messages from Web App to Extension
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// In your web app's script&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extensionId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;your_extension_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Replace with actual extension ID&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello from the web app!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;extensionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Listening to Messages in Your Extension
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// In your extension's background script&lt;/span&gt;

&lt;span class="nx"&gt;chrome&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onMessageExternal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sendResponse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Received message:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Embrace Efficient Communication
&lt;/h2&gt;

&lt;p&gt;By adopting &lt;code&gt;chrome.runtime.sendMessage&lt;/code&gt; and following these simple steps, you ensure effective communication between your web app and Chrome extension. Say goodbye to the old ways and welcome the new era of streamlined messaging. Happy coding! 🚀&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
