You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by Andrew Grieve <ag...@chromium.org> on 2014/06/03 04:27:20 UTC

Re: Android: Deprecate WebView.sendJavascript()?

Filed: https://issues.apache.org/jira/browse/CB-6851


On Mon, May 26, 2014 at 9:42 PM, Andrew Grieve <ag...@chromium.org> wrote:

> I believe this is the common case that the function is used for.
>
> The way to do it without eval is:
>
> 1. Have your app receive the intent. If the app is still starting up, then
> store it in a variable.
> 2. When cordova.js runs, have a plugin whose JS runs on start-up via a
> <runs/> tag. It would call exec() to retrieve the cached value.
> 3. Send the cached value with keepCallback=1, so that from now on, the
> plugin can push data to JS via that CallbackContext.
>
> This method is also nice, because you can have plugins delay the
> deviceready event until they've set up their CallbackContext channels (if
> desired).
>
>
>
>
> On Mon, May 26, 2014 at 3:17 PM, Axel Nennker <ig...@gmail.com>
> wrote:
>
>> We have plugins that register for a secure element element in Android.
>>
>> From the plugin.xml file:
>>
>>         <config-file target="AndroidManifest.xml"
>> parent="/manifest/application">
>>           <activity
>>
>> android:name="de.dtag.tlabs.wallet.handler.UiccTransactionEventHandlerActivity"
>>             android:finishOnTaskLaunch="true"
>>             android:launchMode="singleInstance"
>>             android:noHistory="true"
>>             android:theme="@android:style/Theme.NoTitleBar" >
>>             <intent-filter>
>>                 <action
>> android:name="android.nfc.action.TRANSACTION_DETECTED" />
>>                 <category android:name="android.intent.category.DEFAULT"
>> />
>>
>>                 <data
>>                     android:host="secure"
>>                     android:path="/a00000000102"
>>                     android:port="0"
>>                     android:scheme="nfc" />
>>            </intent-filter>
>>           </activity>
>>         </config-file>
>>
>> The activity then starts the main cordova application (with or without
>> newintent depending whether main is already running or not) and the plugin
>> fires a javascript event to the main application using sendJavascript.
>>
>>   static final String javaScriptEventTemplate = "var e =
>> document.createEvent(''Event'');\n"
>>       + "e.initEvent(''{0}'');\n" + "e.tag = {1};\n" +
>> "document.dispatchEvent(e);";
>>
>>   private void fireTagEvent(final String eventName, final String value) {
>>     final CordovaWebView webView = this.webView;
>>     cordova.getActivity().runOnUiThread(new Runnable() {
>>       @Override
>>       public void run() {
>>         String command = MessageFormat.format(javaScriptEventTemplate,
>> eventName, value);
>>         Log.v(TAG, "Executing java script command: ");
>>         Log.v(TAG, command);
>>         webView.sendJavascript(command);
>>       }
>>     });
>>   }
>>
>>
>>
>> I do not know how I would do this with PluginResult...
>>
>>
>> The main application has a addEventListener in it's javascript that
>> catches
>> the javascript event fired from the native plugin.
>> How would I do this without sendJavascript?
>>
>> -Axel
>>
>>
>>
>> 2014-05-26 20:58 GMT+02:00 Joe Bowser <bo...@gmail.com>:
>>
>> > On Mon, May 26, 2014 at 11:53 AM, Jesse <pu...@gmail.com>
>> wrote:
>> > > Is the webview method evaluateJavascript [1] still available, callable
>> > from
>> > > the context of a plugin? Or is this somehow hidden?
>> >
>> > It only exists on KitKat, earlier implementations require
>> > loadURL(javascript://).
>> >
>> > >
>> > > Personally I think is okay to remove the cordova implemented
>> > > sendJavascript() as long as there is still a way to accomplish the
>> rare
>> > but
>> > > sometimes required bare metal pass through.
>> > >
>> > > Do/will other pluggable webviews support a consistent interface for
>> > calling
>> > > javascript in their loaded pages? ie. Does crosswalk support
>> > > evaluateJavascript?
>> > >
>> > Very good question! I don't know.
>> >
>>
>
>