javascript - Inject an opened window with script -


this question asks way open new window using window.open , inject script. not possible because of cross-domain security issues.

however, problem want exact same thing, except same domain same domain. possible?

note .write not solve problem because wipes html page first.

you can this:

var thewindow = window.open('http://stackoverflow.com'),     thedoc = thewindow.document,     thescript = document.createelement('script'); function injectthis() {     // code want inject goes here     alert(document.body.innerhtml); } thescript.innerhtml = 'window.onload = ' + injectthis.tostring() + ';'; thedoc.body.appendchild(thescript); 

this seems work:

var thewindow = window.open('http://stackoverflow.com'),     thescript = document.createelement('script'); function injectthis() {     // code want inject goes here     alert(document.body.innerhtml); } // self executing function thescript.innerhtml = '(' + injectthis.tostring() + '());'; thewindow.onload = function () {     // append script new window's body.     // seems work `this`     this.document.body.appendchild(thescript); }; 

and if reason want use eval:

var thewindow = window.open('http://stackoverflow.com'),     thescript; function injectthis() {     // code want inject goes here     alert(document.body.innerhtml); } // self executing function thescript = '(' + injectthis.tostring() + '());'; thewindow.onload = function () {     this.eval(thescript); }; 

what (explanation first bit of code. examples quite similar):

  • opens new window
  • gets reference new window's document
  • creates script element
  • places code want 'inject' function
  • changes script's innerhtml load said function when window loads, window.onload event (you can use addeventlistener). used tostring() convenience, don't have concatenate bunch of strings. tostring returns whole injectthis function string.
  • appends script new window's document.body, won't append document loaded, appends before loads (to empty body), , that's why have use window.onload, script can manipulate new document.

it's idea use window.addeventlistener('load', injectthis.tostring()); instead of window.onload, in case have script within new page uses window.onload event (it'd overwrite injection script).

note can inside of injectthis function: append divs, dom queries, add more scripts, etc...

also note can manipulate new window's dom inside of thewindow.onload event, using this.