Phonegap - Does it compile the webpages or simply wrap them - css

I'm new to Cordova and Phonegap. I've encountered a problem where some CSS3 cannot be displayed properly on my (old) Android.
So I wonder if Phonegap compiles the webpages into code (perhaps Java) or just simply wraps it and uses a native browser to open it.
I ask this is just simply out curiosity and wonder if I can implement ways in other forms to help it render.

Phonegap just uses a WebView (Which is essentailly a browser) control where it displays your webpages. Now each phone uses a different WebView control, and also this control varies among different versions of android. So if some parts of your page are not displayed correctly inside the phone's web browser, they won't show up correctly inside a phonegap app.
UPDATE:
A solution to this problem might be this:
"[Third-party WebViews] are platform-independent so that we no longer
have to deal with issues between Android versions," said Bowser, who
spoke Thursday at OSCON in Portland, Ore. An API will be provided so
that these WebViews work like plug-ins, and Bowser mentioned it will
support the recent Android OSes, such as KitKat, Jelly Bean, and
Gingerbread.

Related

What browser engine does Android use for phonegap?

I'm trying to implement some CSS animations in a phone gap project. The animations run fine on an iOS device but not on my Android. In fact some things like dashed borders aren't even rendering.
Do I need any special vender prefixes for Android within a phonegap project?
PhoneGap uses native browser engines. So in android, it uses WebKit.
From PhoneGap
web view used by PhoneGap is the same web view used by the native
operating system.On iOS, this is the Objective-C UIWebView class; on
Android, this is android.webkit.WebView.Since there are differences in
the web view rendering engines between operating systems, make sure
that you account for this in your UI
This tutorial may be helpful for you. It shows how to target for specific browser(means specific render engine).
Hope this helps!
Take care because since version 4.4 (only) Android does use a Chromium based webview (I think before it was simply a webkit-based webview).
The WebView prior to 4.4 has a bad reputation as far as I've read.
This is another reason to use the Crosswalk project which has a Cordova plugin and permits to embed a specific version of Chromium, so that all your apps are using the same WebView engine no matter the SDK (a a cost of a big APK)

Will a Flex app run on a mobile device?

Can a Flex application that was designed for use on a PC be run on an iPad, iPhone, or Android-based mobile device?
Seems like a simple enough question. Visiting http://www.adobe.com/products/flex.html yields a picture of a dude running a (presumably) Flex application on an Android. So at first glance, the answer would appear to be "yes." End of story.
but yet…
There is so much (mis)information out there on various tech sites that suggest Flash-based technologies simply won't run on iOS or other mobile platforms. Why is this? Perhaps they mean to say that Flex won't run "out of the box" and requires a plugin? Or do they mean it won't run at all?
Every time I think I've reached a definitive conclusion, some post on SlashDot or CNET directly contradicts it. So what's the scoop? Can one take an existing Flex application and run it on iOS/Android? (I realize there are screen size issues to consider so the app might not run effectively. I just want to know if the runtimes are available on the mobile devices to allow the Flex app to launch at all.)
Sorry for the noob question. My background is WPF / HTML5. Adobe technologies are completely foreign to me.
I wrote a lot below if you'd like to read it enjoy, if not sorry for taking your valuable bytes :) I directly answered the questions up here first:
Why is this?
It's a confusing matter read below for the why details.
Perhaps they mean to say that Flex won't run "out of the box" and requires a plugin?
Or do they mean it won't run at all?
Using the flash builder tools (the bin folder in the SDK) you can compile for native desktop application, desktop web browsers, native iOS application, native Android application. Android with FlashPlayer plugin installed will show Flash content within the web browser, iOS will only run the ones compiled with AIR, not in the the web browser but as a native app.
Every time I think I've reached a definitive conclusion, some post on SlashDot or CNET directly contradicts it. So what's the scoop? Can one take an existing Flex application and run it on iOS/Android?
Yes, if using AIR and run as a native app on all three platforms (the desktop Flex API is for the most part a superset of the web Flex API), your other points about performance and form factor are valid and should be considered though. The nice thing is you can write your model/controller code in a common library in AS3 then write separate presentation layer interfaces that all share the library.
Here's the very long version:
Using the flash compiler results in "bytecode" in the form of a file with a swf extension using the swf format, you can read a ton more about that here:
http://www.adobe.com/devnet/swf.html
To interpret the file you need some sort of run-time similar to some degree to running WPF/XAML/C# within a .NET framework context (either desktop or using silverlight on the web). In the case of adobe technologies (rough equivalence):
AS3 = C#
MXML = XAML
Flex = WPF+WCF (client side RPC not server side)
Flash Player = Silverlight
AIR (Adobe integrated runtime) = .NET
Framework Redistributable .dll(s)/.so(s) for desktop OSes
(Read this list very loosely please, I know XAML is preserved in the MSIL or whatever which is different because MXML is compiled to AS3 and only if a debug flag is set on the compiler does it include the debugging symbols, there's certainly tons of differences but I think this is an easy and correct enough model to use)
On iOS the browser does not allow for plugins in the traditional sense of netscape browser plugins or ActiveX plugins. For this reason you'll not be able to execute a plugin ie flashplayer or silverlight in the browser. Since Adobe did release a flashplayer for Android devices that does run in the browser it will work on those devices in the browser, however they have essentially thrown in the towel for supporting this long term, as they have to support the majority mobile device platform, iOS, in order to remain relevant (this was I think more a collective throwing in of the towel by Google, device manufacturers, carriers, Microsoft, all just following suit and trying to make the best business decision, WebKit and V8 or SpiderMonkey can probably do 99% of what Flash can do and better in some cases and WebKit will hopefully not splinter and will remain open source... frameworks and the browsers just need to get fleshed out and stabilized).
If the user installs AIR (or the runtime is packaged with the app) then a Flex/Flash (that is stuff coded in AS3 and/or MXML and compiled to a swf) can be transcoded/packaged to be interpreted by the run-time for that device correctly (be it iOS or Android or whatever RIM did, I don't think they have AIR for Windows Phone 7 and Win8 on ARM won't support browser plugins either). Part of the confusion is possibly from the fact that Apple denied the distribution of Apps that were "cross-compiled" which kept AIR out of the list of options for iOS for a good year, just after Adobe started announcing it was usable for that purpose (kicking Adobe while their down). Another part of the confusion probably comes from real vids of people who have 1 hacked their device or 2 were able to get open source alternatives to the flash player run-time to work on their iOS device (gnash was one I'm aware of from some occasional Linux tinkering, also possibly FAKE vids).
You can run Flex applications on mobile devices, but you cannot simply run any Flex project.
In Flash Builder ( Flex Ide) or in Flash Professional you can create mobile projects. These projects generate native applications for iOS and Android.
Last time I tried, the result and the available components where less than what I expected. So, if you can, I'll much recommend you go for something like Appcelerator.com or similar, which turns HTML5/Js code into native apps. I tried them, worked a lot better than Flex.
Short answer: No
Long answer: You can use Adobe's tools to compile your Flash/Flex app for use as a native iOS app. So you won't be able to embed the app in a web page like you normally could with Flex, but you can build it as a native app. Note you have to have Flash Builder 4.5 to do this.
It won't run on iPhone as a .swf file, but it will run on Android based devices that have adobe flash installed. It will also run on the BB playbook, which also has flash.
Flex is a framework.( Anyway it is very beutiful one which even sometime looks like complete different language ).
As soon as you are building AIR application it can run on various platforms like : Windows, iOS, Android, upcomming TV's, PlayBook, even .. into the future ( maybe/hopefuly ) on Windows Phone, plus Linux ( which AIR future is not very clear anyway ( but hopefuly Adobe will reconsider ) ).
So - application created with Flash Builder 4.5+ would probably run everywhere as soon as it is AIR application.
The compilation methoods is really simple, and you almost simultaneously compiling for everything you wanna to.
And one of the most important things here - your applications will run, work, look and feel the same way you were designed on one device. Flex is the thing which is responsible for everything to looks beutiful on each platform it is running.
For instance i am compiling currently for Android, and without even test i can clearly say that it will looks and feel the same way under iOS and Windows, and it will.

Is it possible to upload a picture through a web browser from a mobile device?

This question has been asked before, but not this year - there is no concrete consensus and I know this is a hot topic. In addition, technology changes rather quickly, and the other questions seem to relate to only using the <input type="file>. I am looking for a more verbose modern way to handle these requests. Although I have been developing in ASP.NET C# MVC3, I have been looking into weather ASP.NET MVC4 Mobile will support mobile file upload. From what I have read, it does not, or it has not been covered in the new release notes.
http://www.asp.net/vnext/overview/whitepapers/whats-new
http://www.asp.net/mvc/tutorials/mvc-4/aspnet-mvc-4-mobile-features
From the research I have done jQuery-Mobile seems rather gimmicky.
http://www.parorrey.com/blog/jquery-mobile/file-input-field-uploading-using-jquery-mobile-framework-form-submission-with-ajax-disabled/
http://forum.jquery.com/topic/jquery-mobile-seems-to-clobber-ability-to-upload-files-via-forms
An example that was posted did not work on my iPhone, as the <input type="file" still existed and was therefore grayed out as inaccessible.
http://filamentgroup.com/examples/jquery-custom-file-input/
Another suggestion I have come across involves forcing the user to email the photo to a user-specific email which doesn't really appeal to me or the customers I deal with - this approach also seems like it could be vulnerable to security breaches.
IS there a way to do this that I have overlooked? How can I show a file dialog on a mobile device?
The Safari browser does not support file uploads. You can see this by visiting many of the mobile sites in the actual browser BUT the actual apps will allow this.
So if you are making a mobile web app that you wish to deploy as a native app, you can use phonegap as a layer to do this.
http://docs.phonegap.com/en/1.4.1/phonegap_file_file.md.html#FileTransfer
Also, it is supported in:
Android
BlackBerry WebWorks (OS 5.0 and higher)
iOS
Windows Phone 7 ( Mango )
I use jquery mobile in a production app and it works just fine. I don't do file upload with it; however, that isn't jquery mobile's job anyhow. JqueryUI has issues with its dialog and file upload as well. There are a number of scripts that help with that. I use ajaxfileupload: http://www.phpletter.com/Our-Projects/AjaxFileUpload/ there are better ones out there now though.
I digress. As far as mobile is concerned it is more useful to have camera features involved rather than pure fileupload. No one knows where they store things on their phones, which is part of the problem. For that case you may want to try phonegap. Try this: http://wiki.phonegap.com/w/page/18270855/Image%20Upload%20using%20JQuery%20and%20Python
Yes we can upload picture through mobile,
Face book is a live example for this.
It works for me on Android.
You can see how facebook does it here: https://m.facebook.com/home.php?refsrc=http%3A%2F%2Fm.facebook.com%2F&refid=8&_rdr
<input type="file" name="file1" data-sigil="photo-input" />
Try going to www.tinypic.com and uploading a photo. I can test on iPhone tonight.
This works fine on Android 2.2+. You can upload photos from your gallery or use the camera to take a new picture for uploading. Any other apps that expose similar behaviour like sound recorders, the camcorder and music apps will typically offer alternatives. If you have a good filesystem app installed this will normally allow you to upload arbitrary files.
On iOS, you have to use an app to upload files. Since this is such a glaring omission in this age of web apps, it is very likely this feature will be added in the next major release of iOS although that is likely a few months away still.
Try this:
<input type="file" accept="image/*;capture=camera">
This should be supported in most mobile browsers and should offer the user a chance to choose a local file (image) or one some modern devices even allow them to capture one in the process.
Hope this helps!
Use Phonegap to bridge the gap between client side libraries and native applications. While the client side libraries give a good handle and easy way to set UI things up, you can use the capability of phonegap to perform device specific operations like camera, scanning, call etc.
Mobile browsers in Android (pre 2.2 it seems) and iOS do not allow file system access. And when it does on Android 2.2+ it isn't full access - it is filtered via apps that hit the FS like Gallery or Music.

How to use ASP.NET Web for Windows phone

I want to create an ASP.NET web site. I have not been using ASP.NET for quite a while and I need help. As you know already there is an IE9 mobile browser for Windows phone, I have these questions:
1) Which version of ASP.NET is supported by the IE 9 mobile browser in Windows phone? I means all the output of html is ok.
2) Can all controls in all versions of ASP.NET be used for the IE9 mobile browser?
3) What di I need to set in the Declaration part < !Doctype.......> in my ASP.NET pages ? Will ASP.NET output it according for IE9 MObile Browser?
4) Does the Div control work ? Will this work Div.html = "........html ...."
5) What should not be used from ASP.NET for the IE 9 mobile browser?
6) How do I make the fontsize bigger or which fontsize is best for Wp screen?
------- Update
I have ASP.NET V1.1 with JQuery ( not the latest) , My Windows phone 7 HD7 can not work with the JQuery? Does JQuery have diff version for mobile than ASP.NET?
Any info on what version of Html spit out by ASP.NET V1.1,2.0, to the ASP.NET 4.0??
Using Plain HTML wont help much on the server for many server tasks.
Any resource link on how to build aspnet for windows phone 7 would be appreciated.
See the Web Development for Windows Phone details on MSDN as it provides specific guidance on developing for the phone and details of what is not supported on the phone (but is in the full version of IE9).
The phone uses the same code base for the rendering and javascript engine as the desktop version of IE9 does so most things should work.
If you're build a site specifically targetting the phone you will probably see better results if using jQueryMobile rather than the full version but be sure to test fully.
I'd recommend building a HTML 5 site rather than any (X)HTML 4 variation. The browser supports a lot of the newer functionality and you'll get a cleaner layout as well as backwards compatibility for other devices.
You'll also find lots of useful relevant articles at http://blogs.msdn.com/b/iemobile/ and http://windowsteamblog.com/windows_phone/b/wpdev/archive/tags/ie9/
ASP.NET is a server side technology so it is not related or constrained by the client devices which access to it, you can use Windows based computers, ITab, Max, Linux, Android, Windows Phone 7, Blackberry phones... to connect to the web site and in any case all the server side processing is performed on the web server (or other back end app servers depending on configuration), on the clients will only arrive html to be rendered and this could contain javascript to be executed locally.
in general modern mobile browsers are very good, I had the best experience with Android devices on mobile devices, which run some kind of Chrome compatible browser, iPhones and iPads run safari, also available for PC and Mac.
if you test your application from a PC with multiple browsers like Chrome, Safari and IE and everything works fine, it will most likely work fine, in general JavaScript abstraction libraries are used to write fully cross browser and cross platform javascript, one of the most popular is JQuery.
I am convinced that the version of IE9 (or similar one, it's not 100% the same IE9 of desktops) included in Windows Phone is probably advanced enough to support all HTML 4 tags and probably has a very advanced Javascript engine as well.
To detect from the server which user agent (device, browser) is connected and render different content or format layout with specific style sheets, check this question here in SO:
how to detect a mobile phone in a web application

Designing issue in JQuery mobile with asp.net

I am creating mobile application in asp.net webform targeting IPhone, Android and blackberry. I am using JQuery-Mobile for the same.
Below is my first page I have developed with jquery-mobile.
I don't have iphone, android and blackberry. So my questions are:
Best Simulator I can use on windows XP/ Windows Server 2008 for Iphone, Andriod and Blackberry
Also, when I am running the application on the browser it is looking wierd. I mean textbox size, buttons. Is this the way it looks on normal webpage or it's my faulty design?
As I am developing application in asp.net, do I need to install latest browser which support HTML5 and CSS3 because below browser is IE7.
An old IE is not the best choice to test the capabilities of a HTML5+javascript framework...
For daily basis it's quite ok to use Firefox or any WebKit based browser (chrome, safari ...)
Emulators are very helpful, but to be sure your product works well you will probably need to give it a try on an actual device. I have already seen some reports of problems that show up only when working with the real device.
A team that I do some JQM stuff for has bought a cheap old ipod touch for testing. It's the most demanding apple product you can get. It has the oldest browser, causes most problems and is the slowest. Best choice! :)
Emulator for Android
Simulators for Blackberry
I'm sure Apple has one too - but I think you need to register as a iOS developer before you can get your hands on it. I believe using third-party iOS emulators is against Apple's policy.

Resources