2015-01-01 15 views
5

Tôi đang viết một pixel JavaScript sẽ được phân phát cùng với quảng cáo AD trên các trang của nhà xuất bản. AD này sẽ được chứa trong iframe tên miền chéo (đôi khi nhiều cấp) trên trang web của nhà xuất bản. Vì vậy, các trang xuất bản trông giống nhưXác định url của cửa sổ cấp cao nhất từ ​​iframe nhiều miền chéo

máy chủ (nhà xuất bản) trang web này

<html> 
    <iframe src="http://domain1.com" name="first_level_iframe"> 
     <iframe src="http://domain2.com" name="second_level_iframe"> 
      <!--The script I want to write will be hosted here--> 
     </iframe> 
    </iframe> 
</html> 

Nếu nhà quảng cáo muốn biết về những gì tất cả các trang của mình/AD của mình là nhận được phục vụ thì chúng ta cần phải biết trang chủ url.

Như đã đề cập here chúng ta có thể lấy url trang mẹ sử dụng document.referrer như thế này

var url = (window.location != window.parent.location) ? document.referrer: document.location; 

nhưng nó chỉ hoạt động cho lĩnh vực mà chỉ là một cấp lên. Chúng tôi không thể đạt đến mức cao nhất kể từ khi chúng tôi không có bất kỳ kiểm soát nào đối với iframe "domain1.com". Đây là một vấn đề mà mọi người đang cố gắng giải quyết trong một thời gian dài và có rất nhiều câu hỏi đã có trên SO hỏi chính xác như vậy. Nhưng tôi yêu cầu lại vì điều này article. Nó tuyên bố rằng họ có một giải pháp cấp bằng sáng chế có thể phát hiện url cửa sổ cấp cao nhất. Dưới đây là một đoạn trích từ blog

Các phao cứu sinh là một kỹ thuật được phát triển tại AdSafe: Chìa khóa để giải pháp là khả năng đọc địa chỉ của khung đầu mà là lưu trữ quảng cáo (*). Chúng tôi đã phát hiện khiêu dâm vì các quảng cáo được phải xuất hiện trong trang web "nhà xuất bản sạch" xuất hiện trong khung của trang web khiêu dâm. Hãy nghĩ về HGTV như một minh họa, nhưng không phải là ví dụ thực sự của một "nhà xuất bản sạch" như vậy.

Vì vậy, có cách nào để phát hiện url cửa sổ cấp cao nhất không?

Câu hỏi tương tự: Top window's URL form inside of multiple nested cross-domain iFrames

Trả lời

1

Tôi có giải pháp để bạn có được miền trong cả Chrome và Opera, (trong nhiều khung nội tuyến lồng nhau), mặc dù rất tiếc là không thể thực hiện được trong các trình duyệt khác.

Bạn có thể sử dụng thuộc tính 'window.location.ancestorOrigins'.

Đoạn mã này sẽ hoạt động qua trình duyệt để nhận URL trang gần nhất có thể cho bạn: https://gist.github.com/ocundale/281f98a36a05c183ff3f.js

1

Nếu bạn đang ở trên cùng một tên miền, bạn có thể truy cập vào khung đầu bằng cách sử dụng

window.top.location.href 

Đó là câu trả lời dễ dàng.

Nếu khung nội tuyến lồng nhau của bạn nằm trên miền khác với miền trên cùng, thì bạn sẽ gặp phải vấn đề chính sách gốc, đó là khung được lưu trữ trên miền khác nhau không thể giao tiếp với nhau vì lý do bảo mật.

Nếu bạn kiểm soát việc tạo khung lồng nhau, một giải pháp thay thế là chuyển thông số chuỗi truy vấn trỏ đến khung lồng nhau của bạn.

Một cách khác là sử dụng HTML5 postMesssage để giao tiếp giữa các khung, nhưng một lần nữa, yêu cầu bạn có quyền kiểm soát trên cả hai miền.

Hy vọng điều đó sẽ hữu ích.

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