【问题标题】:Reinitialize javascript function from iframe从 iframe 重新初始化 javascript 函数
【发布时间】:2014-06-01 11:05:27
【问题描述】:

我正在尝试解决我的广告皮肤问题。

我有一个网站可以滚动到固定的标题栏,我还有一个广告皮肤,当广告出现时,它会设置页边距。

为了加载皮肤,我使用带有 google dfp 的 javascript 作为广告服务器。 javascript代码是这样的,但要将广告嵌入我的页面Google DFP使用iframe,所以在我的网页中我有一个iframe,该代码位于iframe的头部。

iframe 查找父窗口并更改我网站的属性。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
var parent = $(window.parent.document);
var parent_body = parent.find('body');
var parent_pad = parent.find('.padded-container');
parent_body.css("backgroundImage", "url('%%VIEW_URL_UNESC%%%%FILE:JPG1%%')")
           .css("backgroundPosition", "top center")
           .css("backgroundRepeat", "no-repeat")
           .css("backgroundAttachment", "fixed")
           .css("margin-top", 100);
parent_pad.before('<a id="sitewrap" href="%%CLICK_URL_ESC%%%%DEST_URL%%" target="_blank" style="display:block;position:absolute;left:0;top:0;width:100%;height:100%;cursor:pointer"></a>');
});
</script>

一切正常,当我的网站加载 iframe 广告时,嵌入 iframe 标题中的 js 代码更改我网站的 css 属性并出现皮肤。

问题是我网站的导航栏,在 iframe 之前加载的粘性导航。 这是调用代码。

stickyNavigation : function stickyNavigation() {

            if ($(window).scrollTop() > navTop) {
                $container.addClass('fixed-nav');
            } else {
                $container.removeClass('fixed-nav');
            }
        },

在哪里

$nav = $('.site-nav');
navTop = $nav.offset().top;

iframe 是在页面之后加载的,所以$nav.offset().top 的值不考虑 100px 的边距。

如果我在浏览器控制台window.headerManager.init(); 中写入,我可以在加载皮肤时重新初始化脚本,但当然我需要在我加载到我的广告服务器上的 js 代码中添加window.headerManager.init();,而我不能从 iframe 头调用window.headerManager.init();,因为window是iframe的窗口,我需要捕获父窗口。

我该如何解决这个问题?

更新

【问题讨论】:

  • 你可能想学习一些关于 jQuery 中的“链接”的知识,从而避免一遍又一遍地重复构建同一个 jQuery 对象。
  • @jfriend00 已编辑,现在更好了吗?
  • 这个想法只是你的语法有错误(链接中间没有分号)。
  • 完成。对于我的问题?
  • 对不起,我不明白这个问题。您的问题似乎与 iframe 和 window.headerManager.init() 有关,但您没有显示 iframe、window.headerManager.init() 代码或您尝试调用该代码的位置或描述任何关于“它没有”的内容工作”的意思。我认为您应该将您的问题简化为仅与您的问题直接相关的内容,并包括详细描述您的问题的重要内容。

标签: javascript jquery iframe


【解决方案1】:

我发现 iframe 与父页面的通信通常通过 postMessage 更容易。您可以在父页面中设置一个侦听器,以便当您的 iframe 发布时,您可以重新初始化您的方法。

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多