Open Bug 5704 Opened 25 years ago Updated 3 months ago

[AppleEvents] support the DoJavascript() appleevent

Categories

(Core :: XUL, task, P3)

Unspecified
macOS
task

Tracking

()

Future

People

(Reporter: mcmullen, Unassigned)

References

(Blocks 1 open bug)

Details

(Keywords: helpwanted)

Priority: P3 → P1
Target Milestone: M6
Accepting
QA Contact: 3853 → 4250
Assignee: mcmullen → rickg
Status: ASSIGNED → NEW
Supported now, er, or at least it almost is. It tries to open a new window, and
initialize its content with a javascript:url.

Unfortunately, we don's seem to support javascript: urls at present.
Assignee: rickg → vidur
Just to put this on your radar.
Assignee: vidur → brendan
Target Milestone: M6 → M9
Brendan is going to help out with javascript: URLs. I don't want to DUP this
with my other javascript: bug (1646), but the bugs are related.
Status: NEW → ASSIGNED
Moving all Apprunner bugs past and present to Other component temporarily whilst
don and I set correct component.  Apprunner component will be deleted/retired
shortly.
Target Milestone: M9 → M10
M10, and I need Mac help.

/be
QA Contact: mcmullen
Simon Fraser has volunteered to help with Mac issues.
Target Milestone: M10 → M15
Priority: P1 → P2
If this is more important than I think it is, pls. let me know -- I'll get Mac
help and fix it, just not before beta.

/be
Is this related at all to what required for test automation in bug
http://bugzilla.mozilla.org/show_bug.cgi?id=5117 ?

if so it should bump up in priority to unblock some test automation work.
if not lower priority is good.   Mac guys?
Priority: P2 → P3
Adjusting priority.

/be
Simon, I would need Mac help for this anyway, so while I'm gone, can I leave it 
with you?  If not, please mark it M16 and bounce it back to me.  I'm trying to 
relieve mitchell of being bugged about brendan's M14 and M15 bugs.  Thanks,

/be
Assignee: brendan → sfraser
Status: ASSIGNED → NEW
Yeah, this is mostly Mac work. I guess the hard part would be finding the right 
script context in which to run an event-supplied script.
Status: NEW → ASSIGNED
Target Milestone: M15 → M16
Well, the calling code for this event is in. Now someone has to tell me how to 
execute some random JS in some context or other. Do we need to specify which JS 
context to run in? Should that come from a specific window?
Summary: Apprunner should support the DoJavascript() appleevent → [AppleEvents] Apprunner should support the DoJavascript() appleevent
*** Bug 13181 has been marked as a duplicate of this bug. ***
be: can you answer my last question? I'll be running this AppleEvent in the 
context of the app. I can get the front window (if one exists). Do I need an 
existing JS context to exectute random JavaScript?
M18
Target Milestone: M16 → M18
bouncing back to Brendan, if you need help from Simon, just holler
Assignee: sfraser → brendan
Status: ASSIGNED → NEW
I don't even have a Mac.  Cc'ing Mac-enabled people, looking for sympathy.

sdagley, are you interested?

/be
I think sdagley said he'd do this -- I swear I heard him say so after that last 
round at the Outback the other Friday....

/be
Assignee: brendan → sdagley
Taking back. Here's what I need to do:

1. Get an nsIDOMWindow for the target window (use front window if null)

2. Get window._content somehow (gives back an nsIDOMWindow

3. QI that to nsIScriptGlobalObject

4. Call GetContext to get an nsIScriptContext

5. Use EvaluateString will some null args to get default behaivor.



What are the security concerns here? Doing it this way means that the AppleScript 

event will have the privileges as well as scope of top-level script tags loaded 

in the current doc.



cc mstoltz for input on the security considerations here. Mitch, please contact 

me if you need more info about this AppleEvent stuff.

Assignee: sdagley → sfraser
I take all that back. Reading at the start of the bug, the way jrm was going to 
do this was to load the JavaScript as a javascript: url in a new window. This 
should ease the security concerns.
Status: NEW → ASSIGNED
I think Brendan's take is that if the AE specifies a window it operates on that 
window and if it doesn't use the front window (or the hidden window if no windows 
are open).  My opinion on the security issue is that we restrict the events to 
local ones assuming another app running on the user's machine already has access.
Well, loading a JS url in a window will always nuke the previous contents of the 
window no? So I think it doesn't matter which window it executes in. I'm tempted 
to just make a new window for each call.
Not that I know what someone would do with this capability but shouldn't/couldn't 
the JS in the URL operate on the specified window rather than just loading?
Please keep this in mind: when a javascript: URL is loaded in an existing window, 
the JS runs with the principal (in the trust domain) of the previously displayed 
page. This is to support 'bookmarklets,' javascript: bookmarks which can read and 
modify the currently displayed page. These are relatively safe since the user 
must explicitly bookmark a javascript: URL, switch to the target page, and then 
choose the bookmark. I suppose this is a similar situation; an AppleEvent would 
allow other applications to do the equivalent of a user's choosing a javascript: 
bookmark, right? And local applications are by definition trusted. There's no way 
to trigger an AppleEvent from an untrusted site over a network, is there? See bug 
28387 for a related discussion (ignore the tangential flame war in the middle of 
the comments).

I'm not sure where these AppleEvents are initiated from, or what that implies. 
Just bear in mind that JS URLs run with the privileges of the most recent 
document in that window. Even though loading the JS URL might blow away the 
previous document (it might not), the script still has access to the content of 
any page from the same host as the previous document. See bug 48723 (NS-
confidential, sorry) for an illustration of this.
Normally, AppleScripts are run by user interaction on the machine. However, there 
are a couple of issues here:
1. There are plugins available that allow you embed AppleScript in a web page,
   and have it executed <http://www.royalsoftware.com/>
2. I *think* it's possible to run AppleScripts over TCP/IP if you have login 
   access to another Mac.
Moving this to Future.
Target Milestone: M18 → Future
adding helpwanted keyword
Keywords: helpwanted
Blocks: 125419
2.5 years later...

ping?
OS: Mac System 8.5 → MacOS X
Summary: [AppleEvents] Apprunner should support the DoJavascript() appleevent → [AppleEvents] support the DoJavascript() appleevent
*** Bug 172972 has been marked as a duplicate of this bug. ***
Francis, Helpwanted means no one currently working on the project has had the
time or desire to implement this feature. If you really want it, I suggest you
find someone who can implement it and pay or otherwise convince them to do it.
You don't have to wait for us to do it; that's the beauty of open source.
*** Bug 244029 has been marked as a duplicate of this bug. ***
*** Bug 255677 has been marked as a duplicate of this bug. ***
What needs to happen to make something happen? This lack of javascript support has been in 
existence since 1999 and no-one is addressing it. Please look at http://www.apple.com/applescript/
safari/jscript.01.html. Five years is a long time to wait!

(In reply to comment #32)
> *** Bug 255677 has been marked as a duplicate of this bug. ***

David.Atherton@attglobal.net: well, you'll have to start coding.

per comment 20, it looks like the plan was:
1. find the right window (or recognize that the script should run in a new window)
2. construct a url of the form: javascript:"string"
where string is the apple event script (double quotes escaped using backslashes, backslashes escaped 
using backslashes)
3a. if you're using a preexisting window, call something like:
window.content.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components
.interfaces.nsIWebNavigation).loadURI(url_from_step_2,null,null,null,null)
3b. otherwise, call window.open(url_from_step_2);

you'd of course want to convert this to c++. thankfully there's a fairly easy mapping from js to c++.

i'd suggest you start by building mozilla on macosx and then finding (use lxr) the appleevent handling 
code. for help w/ the next steps, you'll probably want to visit irc.mozilla.org #developers.
*** Bug 287447 has been marked as a duplicate of this bug. ***
(In reply to comment #35)
> *** Bug 287447 has been marked as a duplicate of this bug. ***

Any idea's when this feature is going to turn up ???, as I would love to 
support you in our installs ???.
(In reply to comment #36)
> (In reply to comment #35)
> Any idea's when this feature is going to turn up ???, ...

Do you have a use case? How would you tell wether the feature has "turned
up"?


Safari's implementation of this requires a document reference; I'm not sure how
much harder that makes it.
(In reply to comment #37)
> (In reply to comment #36)
> > (In reply to comment #35)
> > Any idea's when this feature is going to turn up ???, ...
> Do you have a use case? How would you tell wether the feature has 
"turned
> up"?

At the minute, the only way I can tell if it has turned up, is getting a version 
and checking the Apple Script Dictionary that it has this capability 
manually. Although I guess there might be a programatic way of detecting 
whether this feature is available ??? (Not sure and would have to check).

Although if you are going to add window reference's then this make's it 
more tricky I guess.

As presently the only way I know a browser works is by checking the 
browser's version information from its plist and examing the default 
browser creator code to identify who.

Does this mean, this feature will be coming soon, as like I say I would 
love to enable our installer to use Firefox.
(In reply to comment #39)
> (In reply to comment #37)
> > (In reply to comment #36)
> > > (In reply to comment #35)
> > > Any idea's when this feature is going to turn up ???, ...
> > Do you have a use case? How would you tell whether the feature ...
> At the minute, the only way I can tell if it has turned up, is getting a 
> copy  and checking the Apple Script Dictionary 

O.K. Firefox has the Spyglass 'OpenURL' and a 'Get URL' Appleevent.

> As presently the only way I know a browser works is by checking the 
> browser's version information from its plist and examing the default 
> browser creator code to identify who.

Are we talking about the same thing? Are you asking for a 'Do Javascript'
Appleevent and a 'Document' class like the Safari suite? If so, do you have
a simple Applescript that works when sent to Safari. Perhaps we can make
it work when sent to Firefox.

This is what I had in mind when I used the term 'use case'
http://c2.com/cgi/wiki?UseCase

Is there (known to you) a technical reason why Firefox should not support
the Safari suite?
> O.K. Firefox has the Spyglass 'OpenURL' and a 'Get URL' Appleevent.

  Yes those are the defaults one's, so that they launch a given URL.

> Are we talking about the same thing? Are you asking for a 'Do 
Javascript'
> Appleevent and a 'Document' class like the Safari suite? If so, do you 
have
> a simple Applescript that works when sent to Safari. Perhaps we can 
make
> it work when sent to Firefox.

  Yes I'm asking for "Do Javascript" functionality. An example of what I'm 
sending is

tell application "Safari"
  get the do Javascript "%s" in document 1
end tell

  The %s, can be differen't javascript code, as we fire differen't code at the 
default browser.

> This is what I had in mind when I used the term 'use case'
> http://c2.com/cgi/wiki?UseCase
 
  I guess what you mean, is how is this being used ???, There is no URL 
as the installer we use is totally CD based and we add in extra 
functionality by doing remote javascript execution.


> Is there (known to you) a technical reason why Firefox should not 
support the Safari suite?

  I'm not famiar with the firefox source base so I cannot tell you why it isn't 
support, but I would have though it would be reasonable straight forward, 
as all is required is to add in this apple event into firefox, send the text to 
the javascript engine, pick up the results and send it back to the calling 
app.

(In reply to comment #41)
> ..., but I would have though it would be reasonably straight forward, 
> as all is required is to add in this apple event into firefox, send the text to 
> the javascript engine, pick up the results and send it back to the calling 
> application.

I am inclined to agree with you. Consider yourself Project Manager for the Thomas
Applescript Support in Firefox Project.

The next step is to divide each of those four parts of the project into smaller
parts, none of which is expected to take more than 15 minutes.

I am using this script as the simplest example, which, when working will
indicate at least some success.

tell application "Firefox"
do JavaScript "document.title" in document 1
end tell
Mark, are you able to download the source tree and compile it. You will need 
about 900 MB disk space for the sources and a further 1500 MB of disk space 
for build products. If you are like me and make a mess of things allow for a 
total of about 8000 MB, though it can be done in less.

Instructions are at http://www.mozilla.org/build/mac.html and linked pages.

If you already have fink and the Developer Tools then this is a straightforward
process, though it will obviously take some time to compile all the files 
involved.

If you are starting from scratch, then allow between three days and three
weeks to get everything set up, tested and configured.
(In reply to comment #43)
> Mark, are you able to download the source tree and compile it. You will 
need 
> about 900 MB disk space for the sources and a further 1500 MB of disk 
space 
> for build products. If you are like me and make a mess of things allow 
for a 
> total of about 8000 MB, though it can be done in less.
> Instructions are at http://www.mozilla.org/build/mac.html and linked 
pages.
> If you already have fink and the Developer Tools then this is a 
straightforward
> process, though it will obviously take some time to compile all the files 
> involved.
> If you are starting from scratch, then allow between three days and three
> weeks to get everything set up, tested and configured.

Sorry, but I cannot really do this development, as I'm fully overload with 
day job  (It would be great if my employer would pay me to do this, but this 
won't happen :-( ) and then in evening I do gaming development. There's 
just no time, I'm happy to help out in testing purpose, and any basic 
development questions for this.

Sorry, but I'm going to have to leave this for someone else to pick it up, I'm 
guessing somebody who know's Mac development and reasonable 
knowledge of this source could add this in a 1-2 days maybe, if no major 
restructuring is necessary.
Hi,
  I was wondering what the status of this issue ?
Thanks
Mark
Mark, the last substantive comment was yours, in April this year. Not enough
people are interested in seeing the results of this bug's being fixed, so
nobody is motivated to (for example) resolve the decision implied by 
comment 34 and its predecessors, and start coding.

People who want to do some coding are far more likely to choose areas where
there is some interest from users.
Assignee: sfraser_bugs → jag
Status: ASSIGNED → NEW
Component: Tracking → XP Toolkit/Widgets
QA Contact: jrgmorrison
There is certainly interest from this user, although unfortunately my technical knowledge can't contribute 
much. I mentioned this omission in 1999 as I wished to use Mozilla (and now Firefox and Camino) with 
Alco Blom's excellent URL Manager Pro and Web Confidential on a Mac. These two apps work perfectly with 
current versions of IE, Safari and iCab. I am sure that Alco would be extremely cooperative in working out 
some solution. As I use these apps every day and would love to stop using Safari, I hope that this facility 
can be added to M, F & C. Alco's Email address is alco.blom@mac.com.
(In reply to comment #47)
> .... I mentioned this omission in 1999 as I wished to use Mozilla (and 
> now Firefox and Camino) with  Alco Blom's excellent URL Manager Pro and 
> Web Confidential on a Mac. These two apps work perfectly with 
> current versions of IE, Safari and iCab. 

I see your point. 

See comment 40 and comment 42

Are you able to follow the instructions in comment 43 (how else are
your ideas going to get tested.

Do have a 'use case' - a short Applescript program that does what you
want? (You could test it against Safari)
Assignee: jag → nobody
I'd love to bring this back up, and see if we can implement it. Correct me if I'm wrong but all major browsers support this currently except Firefox.
(In reply to Sam Schooler from comment #49)
> I'd love to bring this back up, and see if we can implement it. Correct me
> if I'm wrong but all major browsers support this currently except Firefox.

correct (2 years later)

I've been trying to move my workflows away from Chrome before Google breaks uBlock Origin and am surprised that Firefox remains such a poor macOS citizen after 21 years. DoJavascript is supported by the other major browsers and is an important accessibility feature. This omission, along with no support for macOS services in the contextual menu #1284890, are unfortunately deal breakers for me.

Severity: normal → S3

The severity field for this bug is relatively low, S3. However, the bug has 5 duplicates.
:enndeakin, could you consider increasing the bug severity?

For more information, please visit auto_nag documentation.

Flags: needinfo?(enndeakin)

The last needinfo from me was triggered in error by recent activity on the bug. I'm clearing the needinfo since this is a very old bug and I don't know if it's still relevant.

Flags: needinfo?(enndeakin)
Type: defect → task
Hardware: PowerPC → Unspecified
You need to log in before you can comment on or make changes to this bug.