Since manifest version 3, background scripts (now known as service workers) aren’t persistent, so I can’t think of a way to register a listener (e.g. web socket) that will receive notifications from my server.
I read about the chrome.gcm API, but I understand GCM is deprecated (and unusable) in favor of FCM.
Is it possible in any way to send messages from my server to my Chrome extension?
chrome.gcm API is in fact using firebase under the hood, there's a bug report in chromium to address the documentation issues and add self-explaining alias to the API methods - https://bugs.chromium.org/p/chromium/issues/detail?id=1337382
Related
I'm trying to use the Assistant2 APIs inside my Web Application (Angular CLI project) with the ibm-watson library and the suggested Webpack Configuration.
But at runtime I get different CORS policy errors calling the Assistant2 APIs.
So it's possible to use the Assistant2 APIs via browser?? Or calls must be all made server side to avoid the CORS policy errors?
Well, Watson Assistant provides REST API that can be called from anywhere where there is access to IBM Cloud (which bacicaly means access to internet) - so from browser as well.
Now, while you can call the Watson Assistant REST API directly from the client-side browser, sometimes it might be beneficial to have a server doing the actual call as when you call the REST API from the browser then the user has access to the request and the response from the system. This means the user has access to context part of the dialog response which in some cases might not be desired (depends on the stuff that the author is storing in the context).
Do we need to check each API (Cache API, fetch API, IndexedDB API and Push API) individually support in the browser before implementing service worker or checking service worker is enough? what is the best practice?
means
if('Cache' in window) {}
if ('fetch' in window) {}
if('indexedDB' in window) {}
if('navigator' in window) {}
if(navigator.onLine){}
OR
if('serviceWorker in navigator)
is enough?
what did I assume that later method will internally call the former methods in order to check service worker?
Is that correct assumption?
if not then what is the default and what neede to check?
if ('serviceWorker' in navigator) is enough.
All browsers that implement the SW API also implement the Fetch, Caches and IndexedDB APIs.
There are some gotchas, though. Latest versions of Chrome and FF support async/await but for instance Samsung Internet doesn't. SI supports SW, so using async/await in the SW throws in SI.
I have successfully created a Native Client app that works using localhost and works once posted to the Chrome App Store.
I now need to find a way to embed this app in a web page outside of the App Store, which currently fails.
I've read that the usage of the nacl_io and specifically sockets is ONLY accessible when published via the Chrome App Store?
I also came across this https://developer.chrome.com/extensions/apps (I know it's essentially discontinued). Is there a replacement that could work? Or is it just the Chrome App Store?
The <embed> tag is mentioned here (https://developer.chrome.com/native-client/devguide/coding/application-structure). Am I right in saying even if we got this to load the .hmf file and communicate with the .pexe that it would still fail when using sockets due to the application not being passed through the Chrome App Store?
Any advice is welcome
Socket access is only allowed for applications in the Chrome Web Store. Similarly, Native Client applications (e.g. using a .nexe file) are also only allowed on the Chrome Web Store.
You can run a Portable Native Client (PNaCl) application on the open web, but it will not have access to the socket API.
nacl_io is still available to use. It's only the socket API that will fail if you try to use it.
You can still use the URLLoader and WebSocket APIs, though. Perhaps these will be enough for your application?
I have seen this article about passing messages between extensions which works when you know the extension ids.
But, what I would really like to do is pass a message from a packaged app to an extension.
I tried to implement the steps in the article above. But i received the message that chrome.extension is not defined.
I assumed this is because it is a packaged app, that it doesnt have chrome.extension.
Is there a way to do this?
Thanks
AH
You should be able to accomplish via Web Intents, specifically the "explicit" variant that can be targeted at a specific app/extension. See this sample in the apps repository for two apps that communicate via explicit Web Intents (the same concept can be applied to an extension and an app, except the extension would receive intents via a URL specified in the manifest).
Cross-extension messaging
In addition to sending messages between different components in your
extension, you can use the messaging API to communicate with other
extensions. This lets you expose a public API that other extensions
can take advantage of.
Listening for incoming requests and connections is similar to the
internal case, except you use the runtime.onMessageExternal or
runtime.onConnectExternal methods.
http://developer.chrome.com/dev/extensions/messaging.html
I need to implement a browser plugin which can register its own protocol (like someprotocol://someurl) and be able to handle calls to this protocol (like user clicking on 'someprotocol' link calls function inside my plugin). As far as I understand, Skype does something similar, except I need to handle links within page context and not in a separate app. Any advice on how this can be done? Can this be done without installing my own plugin, with the help of flash/java?
Things are going to be slightly more complicated than you think.
You're going to have to create an entire application, not just a browser plugin (that plugin can be part of your application). The reason I consider it to be a complete application is that you're going to need to modify registry settings on the client machine to register your custom URL handler.
Here's an MSDN article describing exactly what you have to do to register the custom URL handler on a Windows client:
Registering an Application to a URL Protocol