【发布时间】:2020-02-18 11:04:54
【问题描述】:
我希望我的扩展程序以 iframe 的形式打开,而不是普通的弹出窗口。到目前为止,我已经能够做到这一点。现在我正在尝试使用 jQuery UI 使这个 iframe 可拖动,但无法这样做。我的inject.js 代码如下:
function toggleVisisbility (node) {
node.style.display = (node.style.display === 'none' || node.style.display === '') ? 'block' : 'none'
}
function appendIframe(app) {
var iframe = document.createElement('iframe');
iframe.id = 'popup-app';
iframe.style.cssText = 'position:absolute;top:0;right:0;display:block;' +
'width:350px;height:500px;z-index:99999999;' +
'border: none;' +
'box-shadow: 0px 8px 16px rgba(0,0,0,0.25);';
chrome.storage.local.get("logged_in", function(data) {
if(data.logged_in) {
iframe.src = chrome.runtime.getURL('./html/loggedPopup.html')
} else {
iframe.src = chrome.runtime.getURL('./html/popup.html')
}
});
app.appendChild(iframe)
}
function insertIframe(anchor) {
let app = Array.from(anchor.childNodes).find(function(node){ return node.id === 'popup-app'})
if (app) {
if (app.querySelectorAll('iframe').length === 0) {
appendIframe(app)
}
toggleVisisbility(app)
} else {
appendIframe(anchor)
}
}
var extensionOrigin = 'chrome-extension://' + chrome.runtime.id
if (!location.ancestorOrigins.contains(extensionOrigin)) {
var anchor = document.getElementById('cfp-anchor')
if (anchor) {
insertIframe(anchor)
} else {
const AppRoot = document.createElement('div', { id: 'cfp-anchor' });
AppRoot.id = 'cfp-anchor';
const body = document.getElementsByTagName('body')[0];
body.appendChild(AppRoot);
AppRoot.innerHTML = '';
insertIframe(AppRoot)
}
}
【问题讨论】:
-
您的代码无法使其可拖动,请查找examples。
-
我使用的是 $("#cfp-anchor").draggable();但它不起作用,这就是我从代码中删除它的原因。
-
它可能也需要添加 CSS。这里的问题是,简单地将 CSS 添加到页面中会与页面本身发生冲突,因此您必须使用 ShadowDOM 或通过 DOM 侦听器手动实现拖动。
标签: google-chrome-extension draggable