Comments (9)
Hi,
just a quick question regarding this issue.
I am aware of some work in that direction based on windows.external.notify / executeScriptAsync.
(eg https://github.com/daserge/manifold-win10-patch)
Has this enhancement already been merged or is there no interest in this functionality anymore?
from manifoldcordova.
Hi Sergey,
We do have a way to add JavaScript to the into the webview now
https://github.com/manifoldjs/ManifoldJS/wiki/Using%20Cordova%20Plugins%20in%20Hosted%20Web%20Apps#importing-scripts
This works on the windows version inside the cordova platforms, is this not what you were looking for? LMK> Jeff
from manifoldcordova.
Hi,
sorry to get back to this so late.
What I mean is the following setup for Windows:
- Content / Scripts that use Cordova Plugin functionality (i.e. only invoke plugin APIs)
- This is includes via the x-ms-webview object. No Cordova specific code is directly included in the remote content.
- Cordova itself (and plugin scripts) are included in client mode.
According to the wiki entry this should be possible, and I have also set up my manifest as required (i.e. by allowing mjs_api_access).
Content displays fine, but then apparently APIs are not accessible within the x-ms-webview object (and also not injected there? I have not been able to absolutely verify this).
Communication from x-ms-webview with the wrapper (where the plugins are available) ought to work via window.external.notify / scriptNotify. At least this is the way things work in the above repo (which btw is not mine ;)).
Among other things this also involves a patched cordova.js (see commit daserge/manifold-win81-patch@e4b0bda).
So at this point I am not sure, if what specically I am attempting to do is just not supported, or not working for some reason.
Is hostedapp-bridge.js supposed to handle i) communication, ii) injection of a suitable cordova.js in the x-ms-webview object?
from manifoldcordova.
Hi @flofis What your doing should work fine. There are basically a few steps you'll want to take. In order to be able to access the APIs, you 'll need to enable the access for them:
https://github.com/manifoldjs/ManifoldJS/wiki/Using%20Cordova%20Plugins%20in%20Hosted%20Web%20Apps#enabling-api-access
then, you'll want to identify the js files that you want to inject into the page:
https://github.com/manifoldjs/ManifoldJS/wiki/Using%20Cordova%20Plugins%20in%20Hosted%20Web%20Apps#importing-scripts
These go into your manifest, so when the app is built, it will build out your project with the api access. This allows you to keep all your code inside the package instead of adding to your website. When you launch and the page loades, we'll inject the needed js for both the plugin, and your specified js files. So what your saying should work without issue and you shouldn't need to add in your own js injection. Can you share your manifest?
from manifoldcordova.
Hi,
sure, although the manifest only points to an internal staging server for now and the manifest it very bare-bones.
{
"icons": [],
"display": "fullscreen",
"orientation": "any",
"name": "MANIFOLDTEST",
"short_name": "MANIFOLDTESTSHORT",
"start_url": "https://internalteststage.localdomain/application/login",
"mjs_cordova": {
"plugin_mode": "client"
},
"mjs_api_access": [
{ "match": "https://internalteststage.localdomain/*", "platform": "android, ios, windows", "access": "cordova" }
],
"scope": "/"
}
Using this manifest we also get console entries, that basically say that deviceready, etc. have not fired. Presumeably this is a problem since initializationcode in hostedapp-bridge.js does not run?
A very simplified testcase that only uses invokeScriptAsync / window.external.notify works (see attached file [1]). In this example we explicitely trigger deviceready via
var deviceReady = "$(document).trigger('deviceready');";
_mainView.invokeScriptAsync("eval", deviceReady).start();
Is this possibly related to #62 ?
Many thanks for your help
[1]
msxwebviewcommunication.txt
from manifoldcordova.
I just realized that hostedapp-bridge.js and its proxy implementation do not make use of scriptNotify for communication at all, but rather use navigationStartingEvent and and pass special URIs of the form
http://.cordova/exec?service=' + service + '&action=' + action + '&args=' + JSON Arguments via window.location.href.
We make use of https://github.com/browserstate/history.js/ and I am not ruling out some weird interaction here...
Are you using this approach to communicate between the webview and native for some specific reason?
from manifoldcordova.
Interesting fact: Removing all plugins and readding only the device plugin (for now) gets rid of error messages wrt cordova deviceready not firing etc. In this case also subsequent API access works fine.
I will now gradually readd plugins and look when exactly things break.
from manifoldcordova.
Hi @boyofgreen
I'm a co-worker of @flofis and we finally got it to work . Maybe an old plugin was taking too long or cordova to initialize correctly, we don't know exactly what went wrong.
Is there a reason you're using navigation and its events to communicate with the wrapper?
I adapted the code to use the "MSWebViewScriptNotify"-Event and window.external.notify() instead and it worked fine for me when adapting the content-URI in the project manifext (.appxmanifest) to allow notifications from our url.
BTW: I noticed that sometimes this content uri was prefilled with "https://internalteststage.localdomain/" which didn't work due to the ''. According to visual studio the wildcard is only allowed for subdomains. Is this an error in the generation of the project?
Cheers,
Domi
from manifoldcordova.
Hi domi. I'll expound more when I'm back to my computer but the reason why we went with the navigation event was because the script notify only works with https and we wanted to support http as well
from manifoldcordova.
Related Issues (20)
- Cookies cleared on app restart in Android release build HOT 3
- Release version with fix for #82
- HostedWebApp Plugin not working for iOS HOT 1
- Visual studio process
- cordova-plugin-file doesn't work with ManifoldCordova on Windows 10
- Is there a soon coming update? HOT 6
- Error: Cannot find module '../../node_modules/elementtree' HOT 7
- can't been installed in visual studio 2015, character '<' is illegal
- Ho do I handle no Internet case on application start? HOT 1
- missing cordova.js HOT 1
- How to deal with downloads?
- View doesn't shrink when soft keyboard is shown on Android
- Support android v 8.0.0. HOT 1
- Add platform: Invalid or unexpected token HOT 2
- iOS App - Opens safari - Incase url redirections from http to https Web URL HOT 1
- ErrorUrl not working / whitelist issue HOT 2
- Webview cache not being used (iOS) HOT 4
- Superfluous injection into child iframes (iOS) HOT 2
- Does not work with the latest cordova-ios version HOT 6
- Support for WKWebView on iOS HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from manifoldcordova.