2012-07-04 8 views
5

Non riesco a capire dove sto andando male con questo. In altri browser, funziona benissimo:Window.opener non definito in IE8?

function main__pageeditor_new_body_SetUrl() 
    { 
     function getUrlParam(parentObject, paramName) 
     { 
      var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i') ;    
      var match = parentObject.location.search.match(reParam) ; 

      return (match && match.length > 1) ? match[1] : '' ; 
     } 

     var funcNum = getUrlParam(this, 'CKEditorFuncNum'); 

     this.opener.CKEDITOR.tools.callFunction(funcNum, arguments[0]); 
} 

Ma in IE si ottiene questo errore:

'this.opener.CKEDITOR' is null or not an object

Perché non sarebbe questo lavoro?

+1

Ci devono essere alcuni javascript mancanti nell'esempio. Qualcosa assegna window.opener a this.opener? – dsas

risposta

0

window.opener non funziona sempre in IE8 per motivi di sicurezza. Penso che tu possa mettere il sito (i) nella "zona fidata" in modo che consenta a window.opener di funzionare.

Se le due finestre sono in domini diversi, non funzionerà in alcun browser a causa della stessa politica di origine.

+0

L'ho provato e non sembra funzionare. – andy

-1

Il tuo "questo" contesto potrebbe essere cambiato, a seconda di come usi la funzione.

cambiamento:

this.opener.CKEDITOR.tools.callFunction(funcNum, arguments[0]); 

a:

window.opener.CKEDITOR.tools.callFunction(funcNum, arguments[0]); 

fa che risolvere il problema?

+0

Ho provato che sì e non sembra fare nulla di buono. – andy

+0

Mentre sono d'accordo che usare 'window' invece di' this' è una buona idea, non sono d'accordo che questa sarebbe una possibile soluzione. La funzione viene sempre utilizzata allo stesso modo e funziona in tutti gli altri browser. Inoltre, 'this.opener' viene risolto in un oggetto, solo che non è risolto a destra (per motivi di sicurezza). –

+0

Inoltre, il commento precedente del poster originale era un'indicazione abbastanza chiara che non risolveva il problema. – Russ

0

si prega di verificare una volta che cosa è NULL ??

this.opener 
or 
this.opener.CKEDITOR 
+0

E 'già menzionato nella domanda: '' this.opener.CKEDITOR 'è null o non è un oggetto'. –

+0

significa che window.opener funziona, ma non è possibile accedere all'oggetto CKEDITOR da window.opener. prova this.CKEDITOR –

0

window.opener funziona quando la zona di sicurezza è "Internet" in IE8. provato su Window Opener

successiva, ho voluto provare questo su CKEditor in sé così sono andato a CKEDITOR DEMO

Ci ho aperto un popup 'window.open' utilizzando Developer Toolbar e nel popup, ho eseguito seguendo il codice che ha funzionato bene.

>>String(this.opener.CKEDITOR.tools.callFunction); 

risposta

"function(f){var g=e[f];return g&&g.apply(window,Array.prototype.slice.call(arguments,1));}" 

A questo punto, quando tutto funziona per me, vorrei chiedere di caricare il vostro codice.

+0

Ho caricato la parte del codice relativa a questo errore. Non riesco a caricare il sito completo in quanto è un client privato. Ho provato a testare la zona di sicurezza ma non funziona. – andy

+0

Suppongo che tu stia eseguendo questo script su una pagina aperta attraverso window.open. È giusto? Potete per favore aggiungere questo avviso di riga (CKEDITOR.tools.callFunction) sulla pagina di base appena prima di window.open, e dimmi il risultato. – user961954

0

Ho trovato questo con un simple search: http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/0c014e78-8d35-4df3-93da-7f6a30b4ed8b/

La soluzione fornita c'è:

Under the Security Tab in your internet options, click on the Trusted Websites Icon. Now check the checkbox marked "Enable Protected Mode" and restart internet explorer.

Un'altra resource I found suggerisce di rimuovere anche il sito dalla zona di fiducia:

remove the site from Trusted sites list... it is probably already mapped to the same security zone as the opener (intranet). Select the File>Properties dialog in IE to determine which security zone a page/domain is mapped to.

Dato che probabilmente hai provato diversi suggerimenti finora, potresti aver modificato abbastanza impostazioni per far parte di noi vecchio stato di configurazione. Ti suggerirei di ripristinare tutte le impostazioni di zona sul valore predefinito e iniziare da zero.

+0

L'ho provato e riporta ancora lo stesso errore. – andy

0

ho affrontato Problema window.opener ottenere nulla nella mia applicazione Web in esecuzione in http:/localhost: 8080.If ho posto l'IP indirizzo/hostname invece di localhost quindi questo problema non si è verificato.

Consente di verificare, credo fermamente che questa soluzione sia utile.