Chrome ext,创建 JQuery 对话框的内容脚本需要忽略 iframe

Posted

技术标签:

【中文标题】Chrome ext,创建 JQuery 对话框的内容脚本需要忽略 iframe【英文标题】:Chrome ext , content script that creates JQuery dialog need to ignore iframes 【发布时间】:2012-11-24 07:44:19 【问题描述】:

我有一个简单的 chrome 扩展,可以在我打开的每个选项卡上打开 JQuery 对话框, 问题是当网页中有 iframe 时,对话框会打开,因为页面中有许多 iframe。 我想避免这种情况,我只需要打开它,并且每个页面只有 1 个对话框实例。 如何避免页面中的 iframe? 这是我的内容脚本:

var layerNode= document.createElement('div');
    layerNode.setAttribute('id','dialog');
    layerNode.setAttribute('title','Basic dialog');
var pNode= document.createElement('p');
    console.log("msg var: "+massage); 
    pNode.innerhtml  = massage;

layerNode.appendChild(pNode);
document.body.appendChild(layerNode);

jQuery("#dialog").dialog(
    autoOpen: true, 
    draggable: true,
    resizable: true,
    height: 'auto',
    width: 500,
    zIndex:3999,
    modal: false,
    open: function(event, ui) 
        $(event.target).parent().css('position','fixed');
        $(event.target).parent().css('top', '5px');
        $(event.target).parent().css('left', '10px');
    

);

【问题讨论】:

【参考方案1】:

用这些包裹起来怎么样

if(window==window.top) 
   // we're not in an iframe
   // your code goes here

【讨论】:

【参考方案2】:

正如 PAEz 在评论中所说,默认情况下,内容脚本仅在顶部框架中运行。要使它们在子帧中运行,您需要在 content_scripts section of your manifest 中包含 '"all_frames":true'。同样,如果您使用 tabs.executeScript 注入脚本,则必须在 InjectDetails 参数中包含 '"allFrames":true'。

【讨论】:

以上是关于Chrome ext,创建 JQuery 对话框的内容脚本需要忽略 iframe的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到此错误 chrome-extension://invalid

jquery show not working with href tel 点击android chrome

jQuery UI 对话框中的 IFrame 有时不会在 Chrome 中加载内容,直到对话框被移动或调整大小(但适用于 FF 和 Edge)

Ext.js中组件简要说明

Chrome Extension 扩展程序 小白入门

关闭和加载的jQuery对话框问题