incubator-callback-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Becky Gibson <gibson.be...@gmail.com>
Subject App plugin and iOS
Date Mon, 14 Nov 2011 15:45:07 GMT
I took a look at the app plugin for Android to see if it makes sense to implement this for
iOS as well.   Below is a review of the apis and the iOS ability to implement:

clearCache() - This seems do-able with iOS NSURLCache object.

loadURL()
/**
 * Load the url into the webview or into new browser instance.
 *
 * @param url           The URL to load
 * @param props         Properties that can be passed in to the activity:
 *      wait: int                           => wait msec before loading URL
 *      loadingDialog: "Title,Message"      => display a native loading dialog
 *      loadUrlTimeoutValue: int            => time in msec to wait before triggering a
timeout error
 *      clearHistory: boolean              => clear webview history (default=false)
 *      openExternal: boolean              => open in a new browser (default=false)
 *
 * Example:
 *      navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading
App", loadUrlTimeoutValue: 60000});
 */
We can implement all of these parameters in iOS.  Although, I'm not sure what is meant by
a "native loading dialog" as iOS generally just uses a spinner with this. We could create
and display a standard dialog until the load request is complete.   This is an example of
where only supporting iOS 4 or greater would make this easier since we could use a block to
potentially simplify the code.  Open in a new browser would launch is a standard Safari window
- there would be no mechanism for returning to the app since iOS devices have no back button
like Android.  I think we would have to maintain the history ourselves in order to implement
clearHistory as I can't find any "easy" api to do this.  

cancelLoadURL() - this is do-able in iOS.

clearHistory()
/**
 * Clear web history in this web view.
 * Instead of BACK button loading the previous web page, it will exit the app.
 */
Given the description I'm not sure this makes sense for iOS since there is no back button
and no way to programmatically exit an app - the app should be put into the background.  We
would have to maintain our own history list in order to clear it.

backHistory() - this can be implemented using UIWebView goBack api.

overrideBackbutton()
**
 * Override the default behavior of the Android back button.
 * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will
be fired.
 *
 * Note: The user should not have to call this method.  Instead, when the user
 *       registers for the "backbutton" event, this is automatically done.
 *
 * @param override		T=override, F=cancel override
 */
This doesn't make sense for iOS since there is no back button.

exitApp()
/**
 * Exit and terminate the application.
 */

This is not allowed on iOS.  There is an option to not put apps into the background but I
think Apple would frown on an exitApp() api.  

addWhiteListEntry()
/**
 * Add entry to approved list of URLs (whitelist) that will be loaded into PhoneGap container
instead of default browser.
 * 
 * @param origin		URL regular expression to allow
 * @param subdomains	T=include all subdomains under origin
 */

This is do-able but I question the security of adding an api to allow bypassing the hardcoded
whitelist entry.   I do believe that the current iOS command polling mechanism to invoke gap
commands is fairly secure but I need people with better security skills than mine to confirm.
 


Thus, other than offering a loadURL() command with more options, I'm not sure I see the benefit
of implenting this plugin for iOS.  Do people have examples of use cases where the achievable
apis are needed?

thanks,
-becky
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message