How to add a plugin to safari with cocoa? - cocoa

I want to develop Safari plugin using xCode, What API should I use? Someone can give me some documents or sample codes ,Thanks very much!

The answer is rather complicated i'm afraid.
Unfortunately, Safari the web browser does not have a plugin API. That means you technically cannot extend Safari's user interface or features using plugins.
However, WebKit the web rendering engine (which powers Safari and many other browsers/apps) does have a plugin API (actually it has 2) which allows you to create plugins for rendering web content inside webkit webviews.
You can find documentation on developing WebKit plugins in Apple's docs here. (PDF Link!)
Also note: Safari's lack of a true plugin API has not stopped lots of developers from developing various pieces of software which they call "Safari plugins" even tho they are technically not Safari plugins. They are usually something called an "Input Manager" which are widely viewed as rather questionable pieces of software. Input Managers always seem to be on the cusp of becoming unsupported or broken by Apple. It's not really clear whether Input Managers are kosher with Apple or not.
Then again, several "Safari plugin" Input Managers are quite popular, so....
Input Managers are a whole other topic. I'm sure if you google it you can find a lot of information on them. However, personally I would advise against developing an Input Manager due to their questionable status in the Mac software world and their constant danger of becoming unsupported or badly broken.
Update: A few years after I originally answered this question, Apple did provide a sort of plug-in API for the Safari browser itself. However, they are called "Extensions", not plug-ins.
See the Apple Safari Extension Programming Guide for details.

Check out Rentzsch's ClickToFlash, it's a plug-in that is fairly well documented, along with neat source code.

Related

Desktop application using Firefox WebExtensions

I am working on a XUL desktop application, where I use the browser tag and load a URL in that tag within the desktop application.
However, some websites display as old format and according to Mozilla, XUL is deprecated and will not be useable at the end of 2017. I want to build the application with the latest technology: WebExtensions.
I have searched many examples on the usage of WebExtensions, but all are working within the browser. Can I make a standalone desktop application just like XUL, but using WebExtensions?
If yes, then please give me some hints on how to get started.
If no, is any alternative for the same requirement available?
Webextensions are fairly limited in their scope. Even if there was an application runtime utilising them, you probably wouldn't get much use out of them due to the restrictive isolation from the host system.
Strictly speaking not webextensions, albeit very similar:
The Electron framework/runtime*
Someone at Mozilla is also working on an alternative dubbed "Positron"** though that software's future is uncertain and there is a chance he might abandon it for an entirely new, highly simplified project (at least that's what I gathered from my conversation with him on Github).
*http://electron.atom.io/
**https://github.com/mozilla/positron

Exact difference between add-ons, plugins and extensions

What is the exact difference between plugins, add-on and extensions.
I have read a lot about this and confused,
For example see these four definitions:
1-fire-fox says "Add-ons is the collective name for extensions, themes and plugins" (see https://support.mozilla.org/en-US/questions/790919)
2-www.Differencebetween.net says "Plug-in and Add-on are simply extensions ... Plug-in is the term that is usually used when referring to third party software (interact with a certain program) like flash player ...
3- wikipedia (https://en.wikipedia.org/wiki/Plug-in_%28computing%29) says plugin are being deprecated.
4-I have read in another website that plugins are larger than add-ons and it consist add-on concept.
Also I have read the answer provided in firefox add-on vs. extensions vs. plugins and http://colonelpanic.net/2010/08/browser-plugins-vs-extensions-the-difference/
However I want to understand these differences especially in firebreath where plugins execute automatically through user's consent and add-on should install manually. Also I think plugin embed in htm page while add-on is in form of a separated file like xpi in fire-fox.
Any exact, comprehensive and precise definitions for these three concepts which emerge differences would be appreciated.
General rule of thumb:
Plugins
When you're talking about a web browser, a plugin talks about a NPAPI or similar plugin, which is specific to the page. IE doesn't support "plugins" per se, but they have activex controls which can fill a similar function, though there are also BHO (Browser Helper Object) ActiveX controls which are more similar to extensions. Thus we (the FireBreath team) usually use the term "plugin" to refer to something that works like a NPAPI plugin and the term "extension" to refer to something that works like a typical extension (firefox XPI, Chrome CRX, etc).
Plugins only know about the page they are in; they don't know anything else about the browser or what is loaded in other pages.
Plugins have been responsible for a lot of security problems, since they actually run native code. This has led to a lot of discrimination against them -- much of it deserved. Because of this, and because NPAPI is a royal pain in the neck (hence FireBreath was created), most browsers are trying to phase out plugins. Plugins should never be used unless there is no other way to solve your problem.
That said, there are a lot of cases where they are the only option.
Extensions
An extension is something that is specific to the browser, and they are a bit different on each browser, but tend to be able to learn more about the overall state of the browser; they may be automatically added to pages, accessible separately from a page, etc.
Add-ons
Add-on is more of a generic term which is used to mean a lot of different things. What it actually means just depends on who is talking, but the mozilla definition is probably as good as any; it could be anything that adds functionality to your web browser, regardless of the context.
Key Differences
Extensions tend to be automatic once installed. Plugins are instantiated in one of two ways: 1) by an <object> or <embed> tag in the HTML of a web page, or 2) because they are registered to be the handler for a mimetype which the browser doesn't support.
FireBreath
FireBreath deals with plugins. It has nothing to do with typical browser extensions, only plugins. It is a C++ framework, not a javascript framework, and it allows you to add functionality that can be used from within a web page. Typically FireBreath plugins are used from inside a <object> tag.
FireBreath post-NPAPI
As you may or may not know, Chrome has dropped support for NPAPI plugins (as of version 45) and Firefox has done so as of version 52 (excluding the version 52 Extended Support Release, which will support them for another year). FireBreath 2.0 is now being used in production by several companies and can produce "plugins" (not really plugins, but work similarly) which can work with Google Chrome and Firefox via Native Messaging via a helper extension. The main limitation is drawing; there is no way to draw directly to the browser across native messaging (well, no good way, and no way at all on platforms other than windows).
Eventually we may add support for some abstraction to draw using Canvas / WebGL over the native messaging bridge in FireBreath 2.0, but that hasn't been done yet. Frankly, I don't need it, so I haven't bothered to do it. FireBreath is an open source framework which has unfortunately not received enough support from users in the last couple of years and so the documentation is a bit outdated and there are a lot of little things which haven't been done.
The Native Messaging method relies on an Extension -- we did this primarily to confuse everyone, of course, but also because it was the only way to allow us to communicate with FireBreath plugins from the page in Google Chrome or Firefox.
*(Last updated Mar 6, 2017; Firefox 52 is scheduled to release tomorrow)
Hope that helps. See also:
Browser Plugins vs Extensions -- the difference
FireBreath 2.0 home page

About developing Add-on for Firefox

I would like to define different actions for different pages
I would like to do like this, when I entry :
wwww.test.com/page1.html : alert Hello!
wwww.test.com/page2.html : alert Good morning!
wwww.test.com/page3.html : alert Hi!
How do I implement this idea
Any tutorial links? thinks so much!
There are three general types of Firefox add-ons: Overlay, Restartles (Bootstraped), and using the Add-on SDK (Software Development Kit). There is a good article comparing the three types on MDN (Mozilla Developer Network).
In general, the most flexible are Overlay extensions. Bootstrapped (Restartless) extensions sacrifice some of the capabilities available to overlay extensions for the ability to install and uninstall without requiring the user to restart Firefox. Add-on SDK extensions sacrifice a considerable amount of the capabilities available to the other two types of extensions for having an abstraction layer between the extension writer and the guts of Firefox. The Add-on SDK is intended to make writing extensions easier and reduce the amount of work needed by the person writing the extension to maintain compatibility with future versions of Firefox. It mostly succeeds at this, but it does fail in some ways.
There are tutorials available on MDN:
Getting Started with Firefox Extensions
XUL School Tutorial
Building an extension
Add-on SDK Tutorials (many)
Many more
MDN is a good resource for information about extensions. When working on Firefox extensions I typically have at least one tab open to a Google search for "MDN " and then whatever I am looking for. It is my go-to method of finding documentation for developing Firefox extensions.
There are a couple of forums which have good information:
Mozilla Add-on Forum (Official)
mozillaZine
Welcome to developing extensions for Firefox.
As to the specific question you asked, the exact code depends on if you are using the Add-on SDK, or not. For the SDK, you should read Working with Events and Listen for Page Load among others. For the other types: Intercepting Page Loads, Listening to events in Firefox extensions, and On page load (Code snippet); also among others.

Web GUI frameworks for Phone development

I looked already and couldn't find anything good.
So a question is, are there any good web frameworks that would allow to easily develop GUI for the majority of high end phones? By this I mean
It would have to work "the same" on majority of high end phones (forget the low cost ones)
It would have to simplify the development and hide the ugly details from developer
Clear design and good documentation. Also some stability on the market.
The focus is on good looking and easy to make GUI. Javascript is only a plus.
So basically I am looking for something like jQuery or maybe ExtJS for phone development.
EDIT:
It would be a big plus if it could be consumed in Delphi
EDIT 2:
If it was not clear, I am looking for a web base solution that would run in a browser. So the target is HTML output and not native code.
To contribute to the subject. I found a question that has answers to such topic:
iWebkit vs. JQTouch vs. iUI
So there seem to be the following frameworks:
iUI
jQTouch
WebApp.net
iWebKit
Yahoo! Blueprint
JQTouch
PhoneGap
Sencha Touch
jQueryMobile
PhoneGap supports a wide variety of phones but it does so by making native (or interpreted I don't know) code to run on them, so it is a no go for me.
Yahoo! Blueprint supports a lot of phones also, but seems to need a special framework to run on. So also a no go.
jQTouch and WebApp.net look promissing, but they only support webkit based browsers. Yes these are in majority these days probably, but Blackberry for one has non webkit based browser and Blackberry is very important to me.
I will keep looking, in the meantime, don't be shy to contribute ;)
EDIT
Found this wiki about some frameworks. Most are embedded.
http://en.wikipedia.org/wiki/Multiple_phone_web_based_application_framework
EDIT2
I added Sencha Touch (www.sencha.com/products/touch) to the list as it was added after this post was created. They are the former ExtJS and now have the WebKit based mobile solution.
EDIT3
I added jQuery Mobile (http://jquerymobile.com/) to the list as it was added after this post was created.
Sencha Touch seams to be the solution. Since UniGui for Delphi/Lazarus already supports eye catching ExtJS it would be ideal if it extends to Sencha Touch. We will see.
I'm confused, do you want a web framework that runs on the web for phones (like jqTouch), or are you looking for something that will create native apps provides some amount of portability (like MonoTouch/C#)?
lightweight jquery-like alternative that works on android & iphone (& possibly blackberry & winmo) is xui, cfr. http://xuijs.com/documentation and http://github.com/brianleroux/xui.
edit: xui is more about javascript and less about a good looking GUI, so this might not be what you're looking for after all.
http://jquerymobile.com/
... when its released in "Late 2010".

What programming language is required to create a Firefox plugin?

What are the minimum programming requirements to create a Firefox plugin?
You need to learn XUL for the UI and Javascript for the programming.
more infos here:
https://developer.mozilla.org/En/Developing_add-ons
Firefox plugins (such as things like Flash player) are binary components you develop in NPAPI the cross-browser API for plugins.
Check out Mozilla Plugin Developer Center
You might also look into Firefox Extensions sometimes Firefox plugins are shipped as extensions. Firefox extensions modify or enhance the functionality of the browser itself. Javascript is primarily the language you'll be writing a Firefox plugin.
Check out the Mozilla Extensions Developer Center
Some Firefox plugins that come in handy when developing Firefox plugins are the Venkman Javascript Debugger and Firebug Javascript debugger
If you are into an organized style of reading, and prefer an good ol' book, start here.
http://www.amazon.com/Programming-Firefox-Building-Internet-Applications/dp/0596102437
It will get you started on the basics on XUL, which is in turn used to build the addons. If you have a touch in javascript, it will definitely help you.
Else,
Start here.
https://developer.mozilla.org/En
You can start learning what all you will need to start developing firefox addons, or even firefox itself.
If you are fairly proficient in Javascript and DOM, then, just jump here.
https://developer.mozilla.org/En/Developing_add-ons.
The only problem might be, they are as not comprehensive for a newbie programmer. If you have some professional background in programming, and can pick up a language from sample codes, then start here.
But I would definitely suggest a well organized book, like I mentioned above. There are very few XUL book in the market, this was my first google result, so just linked it here.
Search for XUL on http://www.amazon.com/.Choose one, atleast a book published after 2006-07.
[edit]
Just found out this good article
http://kb.mozillazine.org/Getting_started_with_extension_development
There seems to be a huge misunderstanding here; Are you trying to create a plugin or an extension? As Dougnukem stated, plugins have nothing to do with XUL or extensions. They are shared libraries (.dll, .so, or .dylib for win, linux, mac) that provide functionality that the browser isn't capable of alone.
If you're just getting started, I'd recommend looking at the FireBreath plugin framework and reading through some documentation. A decent place to start is: http://colonelpanic.net/2009/03/building-a-firefox-plugin-part-one/
Also, you still haven't selected an answer for this question; is that because you haven't found an answer yet, or because you've forgotten?
Advanced DOM, the Firefox API

Resources