2012-07-04 36 views
5

Tôi không thể tìm ra nơi tôi đang đi sai với điều này. Trong các trình duyệt khác, nó hoạt động tốt:Window.opener không được xác định trong 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]); 
} 

Nhưng trong IE bạn nhận được lỗi này:

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

Tại sao không làm việc này?

+1

Phải có một số javascript bị thiếu trong ví dụ của bạn. Có điều gì đó gán window.opener cho this.opener? – dsas

Trả lời

0

window.opener không phải lúc nào cũng hoạt động trong IE8 vì lý do bảo mật. Tôi nghĩ bạn có thể đặt (các) trang web trong "vùng đáng tin cậy" để nó cho phép window.opener hoạt động.

Nếu hai cửa sổ nằm trong các miền khác nhau thì nó sẽ không hoạt động trong bất kỳ trình duyệt nào do chính sách gốc tương tự.

+0

Tôi đã thử điều đó và có vẻ như nó không hoạt động. – andy

-1

Ngữ cảnh "này" của bạn có thể bị thay đổi, tùy thuộc vào cách bạn sử dụng chức năng.

thay đổi:

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

tới:

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

Liệu rằng sửa chữa nó?

+0

Tôi đã thử rằng có và nó dường như không làm bất kỳ tốt. – andy

+0

Trong khi tôi đồng ý rằng việc sử dụng 'window' thay vì' this' là một ý tưởng hay, tôi không đồng ý rằng đây sẽ là một giải pháp khả thi. Hàm này luôn được sử dụng theo cùng một cách và nó hoạt động trong tất cả các trình duyệt khác. Bên cạnh đó, 'this.opener' được giải quyết cho một đối tượng, chỉ là nó không được giải quyết cho một đối tượng thích hợp (vì lý do bảo mật). –

+0

Ngoài ra, nhận xét trước đó từ poster gốc là một dấu hiệu khá rõ ràng rằng nó không giải quyết được vấn đề. – Russ

0

hãy kiểm tra một lần rằng NULL là gì ??

this.opener 
or 
this.opener.CKEDITOR 
+0

Nó được đề cập trong câu hỏi đã có: ''this.opener.CKEDITOR' là null hoặc không phải là một đối tượng'. –

+0

có nghĩa là window.opener đang hoạt động, nhưng bạn không thể truy cập đối tượng CKEDITOR từ window.opener. thử this.CKEDITOR –

0

window.opener hoạt động khi khu vực bảo mật của tôi là 'Internet' trong IE8. thử trên Window Opener

Tiếp theo, tôi muốn thử này trên ckeditor chính vì vậy tôi đã đi đến CKEDITOR DEMO

Có Tôi mở một popup 'window.open' sử dụng Developer Toolbar và trong cửa sổ bật lên, tôi thực hiện mã sau hoạt động tốt.

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

đáp ứng

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

Tại thời điểm này khi mọi thứ làm việc cho tôi, tôi sẽ yêu cầu bạn tải lên mã của bạn.

+0

Tôi đã tải lên một phần của mã có liên quan đến lỗi này. Tôi không thể tải lên trang web đầy đủ vì đó là một khách hàng cá nhân. Tôi đã thử kiểm tra vùng bảo mật nhưng không hoạt động. – andy

+0

Tôi giả sử bạn đang thực thi tập lệnh này trên trang được mở thông qua window.open. Có đúng không? Bạn có thể vui lòng thêm cảnh báo dòng này (CKEDITOR.tools.callFunction) trên trang cơ sở ngay trước cửa sổ.open và cho tôi biết kết quả. – user961954

0

Tôi thấy điều này với một simple search: http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/0c014e78-8d35-4df3-93da-7f6a30b4ed8b/

Giải pháp cung cấp 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.

resource I found Một gợi ý cũng để loại bỏ các trang web từ vùng tin cậy:

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.

Do có thể bạn đã thử một số đề xuất cho đến nay, bạn có thể đã thay đổi đủ cài đặt để ở trong một trạng thái cấu hình ird. Tôi khuyên bạn nên đặt lại tất cả các thiết lập vùng của bạn về mặc định và bắt đầu từ đầu.

+0

Tôi đã thử điều đó, và nó vẫn trả về cùng một lỗi. – andy

0

tôi đã phải đối mặt với Issue window.opener nhận null trong ứng dụng Web của tôi chạy trong http:/localhost: 8080.If tôi đặt IP địa chỉ/tên máy chủ thay vì localhost thì vấn đề này không xảy ra.

Cho phép kiểm tra, tôi thực sự tin rằng giải pháp này hữu ích.

Các vấn đề liên quan