Lỗi Javascript từ Google Adsense


79

Trên một số trang web đang chạy adsense của tôi, tôi đã gặp các lỗi sau:

Không thể đăng thông báo lên [ http: //] googleads.g.doubleclick.net . Người nhận có nguồn gốc http://www.anekdotz.com .

JavaScript không an toàn cố gắng truy cập khung có URL [ http: //] www.anekdotz.com/ từ khung có URL [ http: //] googleads.g.doubleclick.net/pagead/ads?client=ca-pub-9099580055602120&output= html & h = 250 & slotname = 9210181593 & w = 300 & flash = 10.0.42 & url = http% 3A% 2F% 2Fwww.anekdotz.com% 2F & dt = 1269901036429 & correlator = 1269901036438 & frm = 0 & ga_vid = 711.000.587,1269901037 & ga_sid = 1269901037 & ga_hid = 654.061.172 & ga_fc = 0 & u_tz = -240 & u_his = 2 & u_java = 1 & u_h = 900 & u_w = 1440 & u_ah = 878 & u_aw = 1436 & u_cd = 24 & u_nplug = 10 & u_nmime = 101 & biw = 1365 & bih = 806 & eid = 44901212 & fu = 0 & ifi = 1 & dtd = 153 & xpc = Xkfk1oufPQ & p = http% 3A.com // www.anekPQ & p = http% 3A.com . Tên miền, giao thức và cổng phải phù hợp.

(từ bảng điều khiển javascript của Chrome)

Các quảng cáo dường như hiển thị chính xác và nó không ảnh hưởng đến mã javascript gốc của tôi. Tuy nhiên đôi khi những lỗi này dường như làm chậm quá trình tải trang. Làm cách nào để khắc phục sự cố này?

(Tôi đã sửa đổi các URL để cho phép tôi đăng bài này vì tôi là người dùng mới)


Anekdotz.com có ​​phải là trang web của bạn không?
Pekka

1
Cùng một vấn đề ở đây. Bài đăng này là từ gần một năm trước! Nếu nó là vấn đề của google, làm thế nào nó không được khắc phục !? Nó cũng giết chết các j khác trên trang web. Theo điều này, nó dường như chỉ liên quan đến quảng cáo hình chữ nhật dài .. google.com/support/forum/p/AdSense/…
UpTheCreek

Gửi vấn đề lên google adsense ....
Incognito

@ user257493 - có rất nhiều ví dụ về những người có cùng vấn đề trên các nhóm / trang hỗ trợ của adsense và tôi chưa thấy ai có cách khắc phục. Sẽ gửi vấn đề cuối cùng, nhưng tôi biết nó cần một tuổi.
UpTheCreek

3
tương tự với iframe của google maps, vâng google có thể phá vỡ các quy tắc. hy vọng nó không làm hỏng seo xếp hạng ;-)
Jacob Lowe

Câu trả lời:


81

Google đã làm sai tập lệnh của họ. Bạn không thể làm gì nhiều về nó.

Vì một số lý do http://pagead2.googlesyndication.net/pagead/expansion_embed.js, được các tập lệnh AdSense đưa vào trang mẹ, đang cố gắng gửi thông tin về quảng cáo vào một văn bản mới được <iframe>tạo để giữ quảng cáo, sử dụng cơ sở postMessage HTML5 mới :

            ha(this, function (f, e) {
                d[Pa](this.a[A]+"|"+f+":"+e, this.la)
            });

Vâng. Một số mã được rút gọn / xáo trộn tốt ở đó. Tin tưởng tôi, Pa'postMessage'!

Đối targetOriginsố trong cuộc gọi này, this.lađược đặt thành http://googleads.g.doubleclick.net. Tuy nhiên, iframe mới được viết với srcthiết lập của nó là about:blank. Điều này không khớp với nguồn gốc đích, vì vậy trình duyệt phải từ chối gửi tin nhắn. Mặc dù vậy, chỉ có Chrome dường như đang thả một sự thay đổi thực sự vào nhật ký bảng điều khiển về nó.

Không hiểu tại sao nó lại làm điều này, đừng '*'bận tâm tại sao nó không chỉ sử dụng làm nguồn gốc mục tiêu ... Tôi thực sự không cảm thấy muốn đi sâu vào tập lệnh khó hiểu để tìm hiểu. Tuy nhiên, lỗi này sẽ không làm cho quá trình tải trang bị chậm lại. Nếu bạn thấy tạm dừng, nó thường giải quyết và tìm nạp các tập lệnh bên ngoài khác.


Này, cảm ơn vì những người đứng đầu. Vâng, tôi không chắc liệu nó có thực sự làm chậm trang hay không, nhưng nó hiển thị thông báo "tải trang" của trình duyệt ở cuối khi trang xuất hiện đã tải. Điều này gây khó chịu và cũng có thể làm phiền một số người dùng nghĩ rằng họ nên đợi cho đến khi trình duyệt của họ tắt. Tôi hy vọng họ làm điều gì đó về điều này sớm.
Arjun

4
Tôi cũng gặp lỗi này, không đặc biệt là chậm nhưng tôi nhận ra rằng nó đang làm cho các JS khác ngừng hoạt động, như tích hợp ứng dụng xã hội fb. Tôi tự hỏi nó là nó như thế nào mà điều này vẫn chưa được sửa chữa.
Mescalito

Tôi có thể nói thêm: điều này chỉ xảy ra với tôi trên một phiên Chrome cụ thể mà tôi đã cài đặt trình chặn quảng cáo. Tôi đã vô hiệu hóa plugin cho các URL cụ thể, thông báo lỗi gốc vẫn được kích hoạt. Nếu mở cùng một trang web trong cửa sổ ẩn danh, sự cố sẽ tắt.
Andres SK

Câu trả lời này có còn giá trị trong năm 2018?
InTheNameOfScience,

15

Google đang cố gắng khai thác một vấn đề của trình duyệt, theo đó một số trình duyệt bỏ qua chính sách cùng nguồn gốc cho các cửa sổ có URL about: blank, cho phép cửa sổ đó gửi XMLHttpRequest hoặc trong trường hợp này là các yêu cầu postMessage đến bất kỳ trang web nào.

Theo như tôi biết, các trình duyệt gần đây đã vô hiệu hóa hành vi này. Bạn phải có một trình duyệt được vá như vậy.

Hy vọng rằng chức năng bị hỏng này không ảnh hưởng đến khả năng kiếm tiền từ quảng cáo của bạn.

Thật khó chịu khi trang web của bạn tạo ra các lỗi Javascript mà không phải do lỗi của bạn, nhưng bạn phải chấp nhận khi chạy Javascript của người khác trên trang của mình.


"cho phép cửa sổ đó gửi ... yêu cầu postMessage tới bất kỳ trang web nào" Đó là cách khai thác như thế nào? postMessagecó thể được gọi trên bất kỳ chế độ xem nào mà không cần phải tính đến các hạn chế xuất xứ giống nhau.
Eli Grey

1
Nó có thể được gọi như vậy, chắc chắn. Nhưng bản thân thông điệp có được gửi đi hay không phụ thuộc vào việc cửa sổ đích, tại thời điểm nhận được thông báo, có nguồn gốc được mô tả bởi đối số thứ hai hay không postMessage. Có vẻ như đó không phải là trường hợp ở đây. (Về lý do tại sao nó có thể là một sự khai thác, trích dẫn từ MDC: "Nếu postMessage được sử dụng để truyền mật khẩu, thì đối số này phải là một URI có nguồn gốc giống với người nhận dự định của thông báo chứa mật khẩu. , để ngăn chặn đánh chặn của mật khẩu của bên thứ ba độc hại ").
Jeff Walden

7

Đó là điều bình thường vì trình duyệt của bạn ngăn chặn các cuộc tấn công CSRF từ các trang web khác.

Để cho phép googleads...truy cập trang web của bạn và giải quyết vấn đề này, hãy tạo một tệp có tên crossdomain.xmltrong webroot của bạn và điền vào nó với nội dung sau:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="googleads.g.doubleclick.net" />
</cross-domain-policy>

Để kiểm tra, hãy truy cập tên miền của bạn http://your-domain.com/crossdomain.xml và đảm bảo không có lỗi nào cho trang đó. Bạn cũng được phép sử dụng các ký tự đại diện, v.v. (xem phần tham khảo). Khi bạn hoàn tất, hãy làm mới trang của bạn. Hy vọng rằng sẽ giúp.

Ví dụ trực tiếp: http://www.blanjamudah.com/crossdomain.xml

Tham khảo: http://en.wikipedia.org/wiki/Cross-site_request_forgery http://curualityorley.com/2007/09/01/flash-flex-tutorial-how-to-create-a-crossdomainxml-file/


1
Điều này không phù hợp với tôi, nó có thể phù hợp với Flash Player.
fmalina


4

Đối với những người truy cập trang này sau khi tìm kiếm mã lỗi miền và giao thức:

AdSense đã phát hành một phiên bản javascript không đồng bộ mới của họ để giải quyết các lỗi tên miền chéo được tạo ra khi chúng tôi sử dụng mã nhúng cũ hơn của họ. Khi chúng tôi sử dụng mã nhúng tiêu chuẩn của họ trên trang web nặng AJAX của mình, chúng tôi đã gặp lỗi tên miền chéo. Khi chúng tôi triển khai mã không đồng bộ của chúng và kết hợp với crossdomain.xml được xác định đúng cách, lỗi miền chéo đã biến mất.


1

Đây dường như là một trường hợp thông báo lỗi che giấu nguyên nhân thực sự. Nguyên nhân thực sự có thể là do một số loại cấu hình sai Adsense; Rất tiếc, Adsense dường như không kiểm tra đủ để đưa ra thông báo lỗi phù hợp hơn.

Bản thân tôi đã gặp lỗi này và đi đến kết luận này sau khi nghiên cứu trên các diễn đàn, nơi một số người cho biết lỗi đã được sửa sau khi xác minh tài khoản ngân hàng của họ hoặc bất cứ điều gì. Trong trường hợp của tôi, môi trường phía máy chủ của tôi đang gặp sự cố với tham số google_ad_client, vì vậy vấn đề thực sự là tham số đó là null. Khi tôi đã sửa lỗi đó, quảng cáo sẽ hiển thị và không còn thông báo lỗi nữa.

Vì vậy, trong thực tế, nó thực sự không liên quan gì đến chính sách cùng nguồn gốc. Bây giờ mã adsense đã chính xác, tôi thậm chí có thể hiển thị quảng cáo khi chạy trên localhost, cũng như trên máy chủ.


1

Chỉ có một vấn đề tương tự. Không chắc nó có liên quan không, nhưng tôi sẽ giải thích dù sao.

Tôi có hai quảng cáo hiển thị trên trang của mình và muốn "cấu trúc lại" mã bằng cách chỉ gọi tập lệnh này một lần ở cuối trang:

<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Quảng cáo của tôi đã bị hỏng và tôi phát hiện ra rằng thẻ script này phải được đặt ngay sau mỗi tập lệnh var ads:

<script type="text/javascript"><!--
google_ad_client = "ca-pub-872346872364872364";
google_ad_slot = "719238712983";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>

Nhưng khi tôi hoàn nguyên các thay đổi của mình, thẻ script đầu tiên vẫn được đặt ở cuối trang của tôi và do đó cố gắng tải một thẻ script khác dưới dạng quảng cáo. Điều này không thành công và tôi đã gặp lỗi này mà bạn đã thấy.

Vì vậy, hãy kiểm tra để đảm bảo rằng bạn giữ hai thẻ script quảng cáo sau khi tách biệt nhau và không đặt ở đâu khác, ví dụ:

<script type="text/javascript"><!--
google_ad_client = "ca-pub-872346872364872364";
google_ad_slot = "719238712983";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

1

Chỉ cần di chuyển <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>đến đầu trang phía trên quảng cáo, thay vì bên dưới, đã khắc phục sự cố này cho tôi


0

Trong tab Trang web trong trang tổng quan Google Adsense của bạn (phiên bản web hoặc ứng dụng). Đảm bảo rằng trang web của bạn được thiết lập với your-domain.com (hoặc bất kỳ tld nào) làm tên miền và www.your-domain.com làm tên miền phụ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.