2012-09-11 28 views
8

Tôi hiện đang sử dụng thẻ nhà xuất bản của Google với DFP để phân phát quảng cáo cho trang web sẽ sớm đáp ứng. Chúng tôi có một vùng quảng cáo cụ thể có khả năng phân phối tối đa 2 chiều rộng tiềm năng, 728 hoặc 960 và tùy thuộc vào độ rộng được phân phối lên nào tôi muốn hiển thị quảng cáo phía trên hoặc bên dưới điều hướng.Làm cách nào để tôi phát hiện các thứ nguyên quảng cáo được phân phát

Vì vậy, câu hỏi đầu tiên rõ ràng là liệu điều này thậm chí còn điên rồ từ xa và hơn nữa là nó có thể? Tôi nghi ngờ tôi có lẽ nên xác định hai vùng quảng cáo riêng biệt.

Câu hỏi chính mặc dù có lẽ là câu hỏi nhiều hơn về học thuật là làm thế nào tôi có thể phát hiện các kích thước của quảng cáo đã được phân phát? Tôi nghi ngờ giải pháp này là bất khả tri đối với nền tảng quảng cáo vì tôi về cơ bản đã phát hiện chèn nút và sau đó kiểm tra kích thước của phần tử vùng chứa.

Tôi đã thử nghiệm với sự kiện javascript DOMNodeInserted tuy nhiên nó dường như kích hoạt cho mọi thứ "NHƯNG" quảng cáo. Tôi bị nhầm lẫn bởi điều này trừ khi gpt chèn quảng cáo theo cách không kích hoạt sự kiện này.

+0

Câu hỏi hay! – jnthnclrk

Trả lời

5

Tôi đã thực hiện một cái gì đó như thế này trước đây ... và phương pháp tôi giải quyết khi ghi đè chức năng DFP nội bộ (renderEnded) để tôi có thể xem quảng cáo là gì tại thời điểm hiển thị trên màn hình ...

Ví dụ để có được kích thước của quảng cáo bạn có thể làm một cái gì đó như sau (tôi đã chỉ được thử nghiệm này trong chrome nhưng nó không nên quá xa là hoàn toàn qua trình duyệt):

<html> 
<head> 
    <title>DFP test</title> 

    <script type='text/javascript'> 
     var googletag = googletag || {}; 
     googletag.cmd = googletag.cmd || []; 
     (function() { 
      var gads = document.createElement('script'); 
      gads.async = true; 
      gads.type = 'text/javascript'; 
      var useSSL = 'https:' == document.location.protocol; 
      gads.src = (useSSL ? 'https:' : 'http:') + 
      '//www.googletagservices.com/tag/js/gpt.js'; 
      var node = document.getElementsByTagName('script')[0]; 
      node.parentNode.insertBefore(gads, node); 
     })(); 
    </script> 


    <script type="text/javascript"> 
     googletag.cmd.push(function() { 
      var slot1 = googletag.defineSlot('/12345678/TEST', [266, 115], 'div-gpt-ad-1340819095858-0').addService(googletag.pubads()); 

      slot1.oldRenderEnded = slot1.renderEnded; 
      slot1.renderEnded = function(){ 
       window.console.log('width: '+document.getElementById('div-gpt-ad-1340819095858-0').getElementsByTagName('iframe')[0].contentWindow.document.width); 
       window.console.log('height: '+document.getElementById('div-gpt-ad-1340819095858-0').getElementsByTagName('iframe')[0].contentWindow.document.height); 
       slot1.oldRenderEnded(); 
      }; 

      googletag.pubads().enableSingleRequest(); 
      googletag.enableServices(); 
     }); 
    </script> 

</head> 
<body> 

    <div id='div-gpt-ad-1340819095858-0' style='width:266px; height:115px;'> 
     <script type='text/javascript'> 
      googletag.cmd.push(function() { 
       googletag.display('div-gpt-ad-1340819095858-0'); 
      }); 
     </script> 
    </div> 

</body> 
</html> 

Điều đó có thể không hoàn toàn là những gì bạn đang theo đuổi, nhưng việc ghi đè chức năng đó sẽ cho phép bạn đến nơi bạn cần ... cho tôi biết nếu bạn có bất kỳ câu hỏi nào.

+0

Đây thực sự là giải pháp gần nhất với những gì tôi đang tìm kiếm. Bước tiếp theo là liên tục phát hiện chiều rộng dự kiến ​​của quảng cáo được hiển thị bên trong vùng quảng cáo. Đối với chúng tôi, quảng cáo có thể khác nhau giữa iframe, hình ảnh và đối tượng flash. Tôi đã tìm thấy rằng họ hầu như luôn luôn có một param chiều rộng mà tôi có thể đọc. Việc phát hiện chiều rộng được hiển thị có vẻ có vấn đề nếu div vùng chứa quá nhỏ vì quảng cáo chỉ bị đập theo chiều ngang. – sphoid

+0

@Matt Cooper - Bạn đã khám phá hàm DFP nội bộ được hiển thị ở đâu và như thế nào? Nếu có các chức năng khác tôi có thể ghi đè lên đó sẽ là tuyệt vời. – dinie

+2

@umami Tôi tìm thấy nó chỉ bằng cách nhìn vào không gian tên googletag với thanh tra chrome. Nếu bạn kích hoạt thanh tra và nhập googletag vào bảng điều khiển, bạn sẽ thấy đối tượng googletag ... có một vài chức năng trong đó và nếu bạn nhìn vào slot_manager_instance và đi sâu vào các đơn vị quảng cáo riêng lẻ, bạn sẽ tìm thấy rất nhiều các chức năng khác ... Một repo khác mà tôi tìm thấy sau này gắn bộ ghi dfp nội bộ và có thể móc vào các chức năng dfp khác, bạn có thể thấy điều đó thú vị: https://github.com/mcountis/ dfp-events –

0

Tôi gặp sự cố tương tự trên WiiMusic.net với Google AdSense. Những gì tôi đã kết thúc là phát hiện kích thước của div chứa quảng cáo có JavaScript và sau đó tải quảng cáo. Trong tình huống này, không thể thay đổi độ phân giải hoặc kích thước trang của tôi một lần được tải, vì vậy điều này đã hiệu quả.

Trong trường hợp của bạn, trang của bạn chắc chắn có thể thay đổi kích thước và những gì không. Tôi nghĩ bạn sẽ phải tải lại quảng cáo tại thời điểm đó, nếu bạn muốn các phiên bản quảng cáo khác nhau hiển thị tùy thuộc vào thiết kế đáp ứng của bạn. Nếu bạn đang sử dụng mã quảng cáo không đồng bộ, điều này có thể thực hiện được.

Tóm lại, có, điều này là lành mạnh và có thể với JavaScript. Quảng cáo của bạn yêu cầu JavaScript để hoạt động, do đó, điều này không nên quá nhiều rào cản.

+0

Trong tình huống của tôi, tôi thực sự cần phải làm ngược lại điều đó. Tôi sẽ điều chỉnh kích thước/vị trí của div chứa tùy thuộc vào kích thước của quảng cáo được phân phát không theo cách khác. Để làm được điều đó, tôi cần phải tìm một số cách để xác định một cuộc gọi lại khi quảng cáo được chèn vào. Như tôi đã nói, tôi đã thử sự kiện DOMNodeInserted và tôi cũng đang thử nghiệm với DOMSubtreeModified để phát hiện khi nội dung quảng cáo được chèn vào. – sphoid

+0

@sphoid, Hãy tha thứ cho sự thiếu hiểu biết của tôi, nhưng tôi nghĩ rằng vùng quảng cáo DFP chỉ có thể chứa một kích thước? DFP xác định quảng cáo có kích thước nào để phân phát cho bạn? Bạn đang định cỡ trang của mình khác nhau tùy thuộc vào quảng cáo có kích thước nào bạn nhận được? Tôi nghĩ rằng vấn đề DOMNodeInserted là do khung nội tuyến mà quảng cáo đang được phân phát. – Brad

+0

Bạn có thể xác định nhiều kích thước quảng cáo được phân tách bằng dấu phẩy cho một vị trí trong googletag.defineslot(). Tôi làm điều này chủ yếu cho vùng quảng cáo bảng thành tích có thể phân phát các biểu ngữ có chiều rộng toàn trang cũng như các biểu ngữ trung tâm hẹp hơn. Một số quảng cáo của tôi không chèn iframe, thay vào đó chúng tạo một div động và chèn một số thẻ tập lệnh và đôi khi là thẻ đối tượng nếu quảng cáo dựa trên flash. Tôi sẽ có thể phát hiện khi các yếu tố đó được chèn vào ít nhất. – sphoid

0

Vì vậy, như thường lệ, tôi đã nghĩ cách này. Lý do tôi không phát hiện thay đổi DOM là do quảng cáo đã được chèn vào lúc tôi đã chỉ định trình xử lý sự kiện. Khi tải quảng cáo đồng bộ, tôi có thể đo ngay kích thước của div vùng chứa và nhận thứ nguyên quảng cáo. Khi tải không đồng bộ, tôi có thể thăm dò ý kiến ​​cho các thay đổi html bên trong bằng cách lưu trữ html gốc bằng cách sử dụng và bỏ phiếu cho các thay đổi và thực hiện phép đo div vùng chứa khi thay đổi xảy ra. Cảm ơn Brad vì đã dành thời gian.

+0

Tôi đã nói quá sớm. Giải pháp này chỉ hoạt động trong các tình huống mà div vùng chứa có thể và sẽ thay đổi kích thước khi quảng cáo đảm bảo. Tôi có một kịch bản mà div container không thể thay đổi kích thước để quảng cáo bị đập vỡ theo chiều ngang mà là vấn đề tôi đang cố gắng tránh. Tôi đoán tôi cần một cách hợp pháp để phát hiện kích thước của quảng cáo. – sphoid

9

Đã có bản cập nhật cho GPT cho phép việc này được thực hiện một cách thanh lịch hơn. Sự kiện sẽ cho bạn biết liệu quảng cáo đã được trả lại và nếu có tham số, cũng như thông tin bổ sung.

googletag.pubads().addEventListener('slotRenderEnded', function(event) { 
console.log('Creative with id: ' + event.creativeId + 
    ' is rendered to slot of size: ' + event.size[0] + 'x' + event.size[1]); 
}); 

Cũng có event.isEmpty sẽ cho bạn biết liệu quảng cáo thực sự đã được trả lại hay chưa.

+1

và một sự kiện.Size quá "mảng, cho biết kích thước của quảng cáo được hiển thị". https://support.google.com/dfp_premium/answer/1650154?hl=vi – MarkD

+0

Đây thực sự là câu trả lời được chọn ngay bây giờ. – jnthnclrk

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