更改通过谷歌标签管理器添加并在 iframe 中异步加载的小部件的 css 属性

西里尔·杜尚-多丽丝

我在我的网站上添加了一个显示在屏幕右下角的小部件,但我更希望它出现在左下角。谷歌标签是这样的脚本

<script src="https://leadbooster-chat.pipedrive.com/assets/loader.js" async></script>

并在加载脚本后生成具有适当 css 定位的 iframe

HTML

<iframe role="complementary" scrolling="no" id="LeadboosterContainer" class="proactiveChat" style="height:100px !important"></iframe>

CSS

@media (min-width: 576px)
<style>
html body #LeadboosterContainer {
    bottom: 28px !important;
    right: 28px !important;
}

事实证明,该小部件无法通过其界面进行配置以显示在左侧屏幕上(我会向他们发送建议),但我发现只需将right: 28px !important;a更改为 aleft就足以产生相当可接受的行为。

我知道开发人员将来可能会更改此属性,并且我正在考虑的解决方案有点脏,但是是否可以准确定位在通过脚本加载小部件后生成的 CSS,以及将 更改rightleft? 如您所见,这里的挑战

  • 该脚本正在异步加载 HTML
  • 有一个媒体查询(实际上有几个规则需要更改)
  • 有一个 !important 标志,它使得在全新的样式表中更难覆盖此 CSS 规则
  • 这是另一个网站上的 iframe ......所以我们不能做任何我们想做的事情,因为安全策略适用于 iframe 内部,我们只能控制 iframe 元素本身进行定位

我怎样才能做到这一点 ?我需要在异步脚本启动后触发一个事件,然后找到一种方法来定位媒体查询。

我想添加到我的谷歌标签的一个例子

// TODO : find a way to fire this code after the script has loaded / implement runAfterChatBotHasLoaded
runAfterChatBotHasLoaded( function() {
  var pipedriveBot = document.getElementById("LeadboosterContainer");
  // TODO : find a way to target each media query
  position = pipedriveBot.getAttribute('right');
  pipedriveBot.setAttribute('left', position)
  pipedriveBot.removeProperty('right'));
});

我也试过

ASomN

如果小部件在 iframe 中,那么您需要:

  • iframe 中的 GTM,而不仅仅是父窗口
  • 用于在 iframe 和父窗口之间安全调用函数的 post 消息 api(父窗口是 GTM 正在加载的位置)

如果您定位的 css 在 iframe 中,那么您需要将其视为没有加载 GTM 容器的不同网站。

如果您试图将 iframe 移动到左下角,那么这在jsfiddle 中对我有用

var pipedriveBot = document.getElementById("LeadboosterContainer");

// remove the styling
pipedriveBot.style.setProperty('bottom', '0', 'important');

// Add your own
pipedriveBot.style.position = "fixed";
pipedriveBot.style.left = "0px";

另请参阅有关删除使用 !important 设置的 css 属性的文章:如何删除重要的 CSS 属性?

让我知道我是否理解正确。如果您需要等到 DOM 包含 LeadboosterContainer,那么您可以设置一个函数来定期检查 DOM,然后触发一个函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据父窗口在iframe中更改CSS属性

Javascript和Soundcloud小部件:如何将新曲目加载到SC小部件iFrame中(通过URL)

如何将这些 iframe 属性更改为 CSS?

如何通过jQuery在iframe中更改/添加CSS

在iframe页面中添加/更改CSS

Apex在IFrame中添加的额外样式属性

从父级更改iFrame中DIV的CSS

在iframe / html中添加简单的CSS

使用jQuery更改和加载iframe'src'属性

如何扩展小部件的属性并在颤振中的自定义小部件中使用

在DetailView小部件中更改属性的值

使用JQuery更改iframe属性

如何在 iframe 标签中隐藏 src 属性值(url)?

访问 iFrame 中的数据属性?

如何使用小部件属性而不是 css 更改 django 表单中下拉字段的宽度

在 javascript 中更改 CSS 属性

IFrame“ src”属性中的控制器操作-YII Framework

通过CSS在gtk3中的不同小部件之间共享小部件宽度

如何在第 1 类中更改第 2 类(Tkinter)中的小部件(标签)的属性?

iframe位置:当我在iframe中添加一些CSS时,修复不起作用

如何在iFrame for Shopify购买按钮中实现CSS更改

如何使用 jquery 将 css 添加到 iframe 中?

CSS height属性错误地调整了iframe的大小

无法在iframe中使用列计数CSS属性

如何使用Selenium从iframe中的iframe获取属性src

Django Forms - 更改小部件属性

如何动态更改小部件的属性?

仅在页面加载后呈现的小部件上通过css或javascript / jquery显示特定链接

更改IFrame的innerHtml上的视频属性