色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

覆蓋iframe中內容的正文樣式

夏志豪1年前8瀏覽0評論

如何控制iframe中body元素的背景圖片和顏色?注意,嵌入的body元素有一個類,iframe是我的站點的一部分。

我需要這樣做的原因是,我的網站有一個黑色背景分配給正文,然后白色背景分配給包含文本的div。WYSIWYG編輯器在編輯時使用iframe來嵌入內容,但是它不包括div,所以文本很難閱讀。

當在編輯器中時,iframe的主體有一個沒有在其他地方使用的類,所以我假設它被放在那里,這樣這樣的問題就可以解決了。然而,當我將樣式應用于class.body時,它們不會覆蓋應用于body的樣式。奇怪的是,這些風格確實出現在Firebug中,所以我不知道發生了什么!

謝謝

更新-我已經嘗試了@mikeq的解決方案,在類中添加一個樣式,這個類就是body的類。這在添加到主頁面的styleshe et時不起作用,但在添加Firebug時起作用。我假設這是因為Firebug應用于頁面上的所有元素,而CSS沒有應用于iframes中。這是否意味著用JavaScript在窗口加載后添加css可以工作?

僅當iframe內容來自相同的父域時,以下內容才有效。

下面的代碼適合我。在Chrome和IE8上測試。內部iframe引用了與父頁面位于同一域的頁面。

在這個特殊的例子中,我在內部iframe中隱藏了一個具有特定類的元素。

基本上,您只需將一個樣式元素附加到框架中加載的文檔的head部分:

frame.addEventListener("load", ev => {
    const new_style_element = document.createElement("style");
    new_style_element.textContent = ".my-class { display: none; }"
    ev.target.contentDocument.head.appendChild(new_style_element);
});

也可以使用link元素代替style來引用樣式表資源。

iframe是頁面中的一個“洞”,在里面顯示另一個網頁。iframe的內容不在父頁面的任何形狀或表單中。

正如其他人所說,您的選擇是:

為iframe中加載的文件提供必要的CSS 如果iframe中的文件與父級來自同一個域,那么您可以從父級訪問iframe中文檔的DOM。 除非您直接訪問并擁有源html和/或css文件,否則您不能更改iframe中顯示的頁面樣式。

這是為了阻止XSS(跨站腳本)

這段代碼使用普通的JavaScript。它創建了一個新的& ltstyle & gt元素。它將該元素的文本內容設置為包含新CSS的字符串。并將該元素直接附加到iframe文檔的頭部。

但是,請記住,不允許訪問從其他來源加載的文檔元素(出于安全原因)——當從嵌入框架的頁面的瀏覽上下文中嘗試訪問時,iframe元素的contentDocument將被計算為null。

var iframe = document.getElementById('the-iframe');
var style = document.createElement('style');
style.textContent =
  'body {' +
  '  background-color: some-color;' +
  '  background-image: some-image;' +
  '}' 
;
iframe.contentDocument.head.appendChild(style);

通過使用SimpleSam5的部分答案,我用一些Tawk的聊天iframes實現了這一點(他們的定制界面很好,但我需要進一步定制)。

在這個顯示在移動設備上的iframe中,我需要隱藏默認圖標并放置一張我的背景圖片。我做了以下工作:

Tawk_API.onLoad = function() {
// without a specific API, you may try a similar load function
// perhaps with a setTimeout to ensure the iframe's content is fully loaded
  $('#mtawkchat-minified-iframe-element').
    contents().find("head").append(
     $("<style type='text/css'>"+
       "#tawkchat-status-text-container {"+
         "background: url(https://example.net/img/my_mobile_bg.png) no-repeat center center blue;"+
         "background-size: 100%;"+
       "} "+
       "#tawkchat-status-icon {display:none} </style>")
   );
};

我不擁有任何Tawk的域名,這為我工作,因此你可以這樣做,即使它不是來自同一個父域(盡管杰里米·貝克爾對山姆的答案的評論)。

iframe有另一個作用域,所以您不能用javascript訪問它來設置樣式或更改它的內容。

基本就是“另一頁”。

你唯一能做的就是編輯它自己的CSS,因為用你的全局CSS你什么也做不了。

這里的技巧是分配一個全局css變量給你的主體,用新的顏色監聽消息,然后一旦收到消息就改變全局css變量。

我用的是angular,但是它應該可以和純javascript一起工作

我的用例是在保存之前,在iframe中向用戶展示顏色變化會如何影響他的網站

域A

@ViewChildren('iframeContainer') iframeContainer: QueryList<ElementRef>

sendDataToIframe(
  data = {
      type: 'colorChange',
      colors: {primary: '#000', secondary: '#fff'},
  },
): void {
  if (this.targetUrl)
    this.iframeContainer.first.nativeElement.contentWindow.postMessage(data) // You may use document.getElementById('iframeContainer') instead
}

域B

acceptedEditOrigins = [
  'https://my.origine.ccom', // Be sur to have a correct origin, to avoid xss injecto: https://en.wikipedia.org/wiki/Cross-site_scripting
]

constructor() {
// Listen to message
window.addEventListener('message', (event) => this.receiveMessage(event), false)
}

receiveMessage(event: MessageEvent) {
  if (this.acceptedEditOrigins.includes(event.origin))
    switch (event.data.type) {
      case 'colorChange': {
        this.setWebsiteConfigColor(event.data.colors)
      }
    }
}

setWebsiteConfigColor(colors: WebsiteConfigColors) {
  if (colors) {
    const root = document.documentElement
    for (const [key, value] of Object.entries(colors)) {
       root.style.setProperty(`--${key}`, value) // --primary: #000, --secondary: #fff
    }
  }
}

body {
  background-color: var(--primary);
}

如果您控制了承載iframe的頁面和iframe的頁面,則可以將查詢參數傳遞給iframe...

這里有一個例子,根據托管站點是否是移動的,向iframe添加一個類...

添加iFrame:

var isMobile=$("mobile").length; //detect if page is mobile
var iFrameUrl ="https://myiframesite/?isMobile=" + isMobile; 

$(body).append("<div id='wrapper'><iframe src=''></iframe></div>");
$("#wrapper iframe").attr("src", iFrameUrl );

iFrame內部:

//add mobile class if needed
var url = new URL(window.location.href);
var isMobile = url.searchParams.get("isMobile");
if(isMobile == "1") {
    $("body").addClass("mobile");
}

對于一個iframe,您可以這樣做:

document.querySelector('iframe').contentDocument.body.style.backgroundColor = '#1e1e2d';

如果您要處理多個iframe:

document.querySelectorAll('iframe').forEach((iframe) => {
    iframe.contentDocument.body.style.backgroundColor = '#1e1e2d';
});

也許現在已經改變了,但是我對這個元素使用了一個單獨的樣式表:

.feedEkList iframe
{
max-width: 435px!important;
width: 435px!important;
height: 320px!important;
}

給你的iframe頁面的主體一個ID(或者類,如果你愿意的話)

<html>
<head></head>
<body id="myId">
</body>
</html>

然后,同樣在iframe的頁面中,給CSS中的頁面分配一個背景

#myId {
    background-color: white;
}