Skip to content
This repository

Accessing JS library in iframe from greasemonkey #1625

Closed
inanutshellus opened this Issue September 05, 2012 · 1 comment

2 participants

inanutshellus arantius
inanutshellus

I'm trying to access Dojo within my webapp, and having issues getting what I need. Specifically, I have a webapp in an iframe with different versions of Dojo loaded:

In Firebug, I can do this:

window.dojo.version; // 1.7
window.frames[0].window.dojo.version; // 1.0
(Note iframe is in same domain as parent)

In GreaseMonkey, I can't find either version of Dojo:

dojo // undefined
window.dojo // undefined
window.frames[0].window.dojo // undefined 

I started looking into unsafeWindow which supposedly I shouldn't use. It gives me access to the window'd Dojo, but not the iframe'd dojo I actually want.

unsafeWindow.dojo.version // 1.7 (wrong version)
unsafeWindow.frames[0].dojo // undefined 
unsafeWindow.frames[0].window.dojo // undefined
window.frames[0].window.dojo // undefined
window.frames[0].unsafeWindow // undefined
window.frames[0].window.unsafeWindow // undefined

I've also tried withDoc but I suspect I'm using it incorrectly:

unsafeWindow.dojo.withDoc(window.frames[0].window, function(){
    var dijit = unsafeWindow.dijit; // seems wrong; doesn't work.
    var widget = dijit.byId('someWidgetInsideIframe');
    console.log(widget); // undefined
}, this);

Any suggestions on other things I can try to get access to Dojo 1.0 in the iframe? Or if not that, at least figure out how to get access to dojo widgets defined in the iframe using the Dojo I do have access to?

FWIW, I posted this question in June on StackOverflow:

http://stackoverflow.com/questions/10901651/accessing-javascript-library-in-iframe-in-greasemonkey-script

Mod it up. ;-)

arantius
Collaborator

This is a support question seeking an answer, not a bug/issue seeking a resolution. It should be on the mailing list ( https://groups.google.com/forum/#!msg/greasemonkey-users/ ).

But, that said, as of Greasemonkey 1.0 if you want to be interacting heavily with content in the page, and here you clearly do, the right thing to do is use @grant none. Then things should work just like you're operating in the page.

http://wiki.greasespot.net/@grant

arantius arantius closed this September 05, 2012
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.