Prebid.js icon indicating copy to clipboard operation
Prebid.js copied to clipboard

Prebid 10.12.0 prebid.renderAd does not render certain banner ads that break out of the frame but do not walk up additional frames anymore

Open damjan25 opened this issue 2 months ago • 16 comments

When switching from 9.53 to 10.12 the banners ads stopped being displayed.

Since this commit(#13851) calling pbjs.renderAd() does not render BANNER ads anymore. [deployed in 10.11.0]

https://github.com/prebid/Prebid.js/pull/13851/files#diff-b09bb69302f9e7c2a9de1ded930601d79326169d5a687af2822e07ce03e25275L327-L330

How it used to work:

  1. you created iframe
  2. then provided document object from this iframe to renderAd function like for example: pbjs.renderAd(iframe.contentWindow.document, bid.adId)
  3. renderAd() would then take this iframe and write the BANNER ad into it
  • Since this was now removed in commit #13851 if you pass iframes document into it, it will create double nested iframes and not display ads
  • And if you provide window.document to it and element with ad-unit-id exists on the websites it will still not insert the iframe into that div element generated by renderAd()
Image

@dgirardi is this expected behavior?

damjan25 avatar Oct 21 '25 15:10 damjan25

is this expected behavior?

No; are you able to provide steps to reproduce? Anything in the debug logs? Or can you spot the difference comparing to:

https://github.com/prebid/Prebid.js/blob/426ddcc027d74b54382df72162f297276994eabc/integrationExamples/noadserver/basic_noadserver.html#L73-L84

dgirardi avatar Oct 21 '25 16:10 dgirardi

I noticed now that that particular example page is set up to use an old version of prebid, but (when you do get a bid, might need some refreshing) that setup does work for me on master and 10.12.0:

Image

dgirardi avatar Oct 21 '25 16:10 dgirardi

We figured out some similar issues and tested further with your example here. I analyzed the difference between rendering with and without doc.write to understand what happened after switching to prebid 10.x.

With prebid 10.13.0 the structure of the ad include now two nested iframes - first the one from the page itself and second one genereated by prebid:

Image

If using a prebid 9.52.0 with doc.write locig, which is present since years, there will be only one iframe - the one from the page:

Image

Furthermore from this clean example there seems to be trackings missing as the last one here from using prebid 9.52.0 will not get fired when using 10.13.0:

Image

This is for the same ad, but rendered with prebid 10.13.0:

Image

From my understanding and what we have recognized there will be cases that ads will not get rendered properly when using prebid up from 10.11.0 as there is an additional iframe included. I don't think some of the SSPs will be aware of changing the logic in their creatives to reach the most top iframe. For ads with running only images and no further logic it seems to work as show in the above example.

Any idea on how to improve the complete logic for such cases when using no adserver?

vlyby-nadja avatar Oct 22 '25 09:10 vlyby-nadja

By similar do you mean the ad does not show @vlyby-nadja? Or something more subtle like tracking discrepancies, or both?

Any chance to get an example of a creative that can't render? I agree that if it has logic that expects to find the top frame one level up it would have trouble, but it seems odd that it would not render at all.

I am wondering if you found some way to consistently trigger https://github.com/prebid/Prebid.js/pull/13991, which shows up as an adRenderFailed event; are you able to check if that PR makes a difference @damjan25 ?

The extra iframe from https://github.com/prebid/Prebid.js/pull/13851 is to address a tracking problem introduced with 10's yielding feature; if it breaks some creatives it would affect most setups (including GAM) and the solution I believe is to disable yielding (as in https://github.com/prebid/Prebid.js/pull/13789/).

dgirardi avatar Oct 22 '25 15:10 dgirardi

@dgirardi I tried with #13991 and still getting same issue unfortunately.

Strange that bidders emit "adRenderSucceeded" event but they say they dont track any ad impression on their side:

Image

For me bidders that jump out of 2nd nested iframe work perfectly but the ones that stay inside of it just dont display anything.

damjan25 avatar Oct 23 '25 16:10 damjan25

Do you have a page that shows the issue, or a copy of the bidResponse event payload for the problematic ad?

dgirardi avatar Oct 23 '25 16:10 dgirardi

@dgirardi yes, is there prebid slack/discord or where can I send it to you?

damjan25 avatar Oct 24 '25 08:10 damjan25

@dgirardi Yes, we have same issues with ads do not get rendered even the prebid would detect them as rendered. Unfortunately there is right now no example I could share, as the SSPs we're having issues with, will mostly work on our publisher pages only (domain detection at the SSPs). I'm trying to get some examples to work, but may need some time on this.

Furthermore I tried the mentioned PR https://github.com/prebid/Prebid.js/pull/13991 which unfortunately do not change anything at our situation. For that yielding option, we would need some more time to test further. Thank you for your patience on that.

vlyby-nadja avatar Oct 24 '25 08:10 vlyby-nadja

If it shouldn't be posted here you can send to [email protected]

dgirardi avatar Oct 24 '25 14:10 dgirardi

@dgirardi did you get the mail on friday?

Were you able to reproduce on your side with that adUnit?

damjan25 avatar Oct 28 '25 08:10 damjan25

Yes, I was able to reproduce (thank you!). At least in that case it is an issue of the creative expecting to be one frame down from the advertiser site.

We're now discussing our options - rolling back that change requires rolling back other features (specifically yielding, which is meant to improve page performance). Alternatively we could give publishers an option to turn both off.

dgirardi avatar Oct 28 '25 15:10 dgirardi

@vlyby-nadja were you able to solve this issue by modifying the creative to expect another frame layer?

patmmccann avatar Nov 04 '25 15:11 patmmccann

@patmmccann no this is not possible, because there are several bidders affected. In the meanwhile, we even figured out that not all of the affected bidders we're using having the issue with the missing ad rendering. Some of them render the ad correctly, but the bidder related trackings are missing, which will cause issues in reportings on their end (especially missing impression tracking). This means the additional iframe is causing issues in the bidder related trackings as well, which I already figured out with the Appnexus test ad from your example in a comment above: https://github.com/prebid/Prebid.js/issues/14048#issuecomment-3431263762

Any news on the possible options you're currently discussing internally?

vlyby-nadja avatar Nov 27 '25 10:11 vlyby-nadja

all of the affected bidders

It would be very helpful to provide the list so we can correspond with them. If you don't want to post it here please email me at pmccann at prebid

The last time we discussed this at committee we were awaiting independent confirmation before doing anything. A couple major SSPs ran some tests and said they were not affected, so we have no current plan.

Currently we're considering an optional flag that would restore the old render flow, potentially with a deprecation notice on day 1.

patmmccann avatar Dec 02 '25 15:12 patmmccann

The committee considered this again, and we will be offering this flag and not reverting a bunch of stuff.

patmmccann avatar Dec 03 '25 18:12 patmmccann

@patmmccann I send over a list via mail.

vlyby-nadja avatar Dec 04 '25 08:12 vlyby-nadja