3

我们在使我们的 html iframe 广告 mraid 兼容时遇到了一些问题。我们想做的是让一个“相对简单”的 HTML 广告在应用程序和浏览器中都能正常工作(我们希望在 mraid 可用时使用 mraid.open,如果不可用则使用 window.open)。

我们当前的广告代码由 iframe 的 javascript document.write 和我们托管的 html 源代码组成。我们不控制执行 javascript 标记的域,也不创建实际广告的 HTML 源(尽管我们可以对其进行修改,例如包含额外的脚本)(我们也不能对 HTML 施加某种类型的要求)。

为了使我们的广告 mraid 兼容,我们需要在广告中包含“mraid.js”。因为“实际广告”iframe 的来源托管在我们的域中,所以在广告的 html 中包含 mraid.js 没有多大意义,因为这将指向我们域中的某些 mraid.js 版本。

这就是为什么我们必须在我们的标签中包含“mraid.js”的原因(它在“另一个域上”的 iframe 中执行,其中 mraid.js 的特定实现可能可用。这导致了实际问题,“实际由于跨域安全问题,ad" iframe 无法访问生成的 mraid 对象。

我用谷歌搜索了很多,试图弄清楚其他人是如何处理这个问题的,但我几乎一无所获,这就是为什么我认为我们可能会做一些奇怪的事情。是否有其他方法可以包含 html 横幅而不将其放入自己的 iframe 中?我曾想过 document.write 将 html 文件本身写入“其他域”iframe,尽管这需要我们将 html 内的任何相对链接更新为绝对链接(这似乎不可能 100% 可靠地完成)。

据我所知,不可能让 mraid 对象可用于我们的 iframe(?),这就是为什么我能想到的另一个解决方案是制作我们自己的“mraid”接口,它允许“他们的”iframe 的 mraid 和“我们的”iframe。然而,对于我希望的小问题来说,这似乎是一个相当大的解决方案。

如果maid接口是要走的路,有人可以解释如何有效地设置它吗?我目前的想法是,在我的 html 源代码中,我需要实现 mraid.js 中可用的每个方法,并为每个方法执行特定的 postMessage() 到执行“真正的 mraid”方法的父窗口(如果 mraid可用)并使用另一个 postMessage() 将任何潜在结果返回给我们的 iframe。

任何建议将不胜感激。

4

0 回答 0