发现清洁溶液
我找到了一个非常干净的解决方案,它真的让整个问题变得毫无意义,我确信当我提出这个问题时它就存在了......我也很无知也在寻找它.
attachTo: 'top'在PageMod构造函数中使用只将脚本附加到顶级文档而不是任何文档iframes.
因此,如果您发现PageMod附加内容多次附加,则可能是因为它iframes与顶级选项卡文档一起附加.添加attachTo: 'top'为传递给PageMod构造函数的对象的属性,您不必担心iframes.
对于下面的问题,解决方案将是
var _workers = [];
var pageMod = require("sdk/page-mod").PageMod({
include: /https?:\/\/www\.websitename\.net.*/,
contentScript: "self.port.on('hello', function() { " +
"console.log('['+document.location.href+']: " +
"My worker said hello to me!');",
contentScriptWhen: "end",
attachTo: 'top', //<-- add this property to only attach to top level document
onAttach: function(worker) {
_workers.push(worker);
worker.on("detach", function() {
var ind = _workers.indexOf(this);
if(ind !== -1) {
_workers.splice(ind, 1);
} …Run Code Online (Sandbox Code Playgroud) 我希望用户能够通过browserAction我的扩展程序的弹出窗口上传文本文件作为输入,但我遇到了一些问题.
我一直在使用隐藏input标签,click()当用户点击文件上传按钮时我会触发该标签.文件浏览器对话框打开,所有内容似乎都运行良好,直到弹出窗口自动关闭.由于包含input标签关闭的"网页" ,change事件永远不会触发.
由于延长已经拥有用于填充与持久性数据弹出后台脚本,我想我可以创建input在后台脚本,并触发该与.click()当用户点击,在弹出的文件上传按钮.
但是,即使input在后台脚本中触发click事件,也不会打开文件浏览器对话框.
我认为这是因为Chrome不允许以编程方式触发文件输入,除非是通过用户操作,但我不确定.这就是我尝试的方式;
popup.js
//Button in popup which should open file broswer dialog
//when clicked
browseBtn.addEventListener('click', function() {
chrome.runtime.sendMessage({msg: 'file_input'});
}
Run Code Online (Sandbox Code Playgroud)
background.js
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'text/*';
fileInput.addEventListener('click', function(e) {
console.log('fileInput clicked');
}, false);
fileInput.addEventListener('change', function(e) {
console.log('fileInput changed');
console.log(this.files);
}, false);
chrome.runtime.onMessage.addListener(function(e) {
if(e.msg === 'file_input')
fileInput.click();
});
Run Code Online (Sandbox Code Playgroud)
我知道click事件已被触发,因为fileInput clicked …
javascript google-chrome input chromium google-chrome-extension
我发现了一个奇怪的问题getImageData; 在获取图像数据时,图像的透明度似乎被忽略.
由于canvas在获得图像数据之前需要将任何图像绘制到a ,我认为这是一个问题,因为canvas该问题是不透明的.但我错了,因为canvas在drawImage保持透明度时使用作为参数.
这是我加载图像的方式;
var load_image = function(name, url, holder, callback) {
var img = new Image();
img.src = url;
img.addEventListener('load', function(e) {
var canvas = make_canvas(e.target.width, e.target.height);
var ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(e.target, 0, 0);
holder[name] = {canvas: canvas, ctx: ctx};
delete e.target;
callback.call();
}, false);
};
Run Code Online (Sandbox Code Playgroud)
的callback是简单地绘制函数,这将调用draw_image绘制图像.
通常的版本;
var draw_image = function(ctx, img, sx, sy, w, h, dx, dy) { …Run Code Online (Sandbox Code Playgroud) 我的QTabWidget实现没有检测到它tabCloseRequested()和currentChanged()信号.
TileSheetManager::TileSheetManager(QWidget *parent)
: QTabWidget(parent)
{
int w = WIDTH;
int h = HEIGHT;
this->setMinimumSize(w, h);
this->setMaximumSize(w, h);
setTabsClosable(true);
setTabShape(QTabWidget::Rounded);
connect(this, SIGNAL(tabCloseRequested(int index)), this, SLOT(closeTileWidget(int index)));
connect(this, SIGNAL(currentChanged(int index)), this, SLOT(tabChanged(int index)));
}
Run Code Online (Sandbox Code Playgroud)
qDebug()对我不起作用,所以我正在使用QMessageBox它.
void TileSheetManager::closeTileWidget(int index)
{
QMessageBox msgBox;
msgBox.setText("Tab " + QString::number(index) + " removed!");
msgBox.exec();
TileWidget *t = (TileWidget *) widget(index) ;
t->deleteLater();
removeTab(index);
}
void TileSheetManager::tabChanged(int index)
{
QMessageBox msgBox;
msgBox.setText("Tab was Changed!");
msgBox.exec();
TileWidget *t;
for(int i = …Run Code Online (Sandbox Code Playgroud) 我一直在玩用javascript/PHP模拟命令行的想法.基本的想法是,我希望能够像在命令行上一样运行c ++程序.
我使用javascript创建了一个基本控制台,并使用C++的代码解析器将某些内容添加到原始源,以使我的PHP程序执行脚本能够识别何时有输入请求或程序何时结束.现在,我希望能够以这样的方式在javascript(控制台web应用程序)和PHP(程序执行)之间进行通信,以便PHP可以告诉javascript显示什么(输出)和请求输入.
我用AJAX计划了它.一旦用户在控制台(javascript端)上输入程序运行命令,它将切换到执行状态并向具有程序名称的PHP脚本发送请求.该脚本将启动该过程并通过回显结果结束.根据请求响应,javascript将再次向PHP脚本发送请求,该脚本将从其离开的位置进行选择并回显另一个结果以便javascript接收.这将持续到PHP脚本回显错误字符串或终止字符串.
经过AJAX的许多天真尝试后,我知道我的想法是完全错误的.我一直在想是否有另一种方法可以在两端之间进行通信.有没有办法可以保存我的PHP脚本的状态(资源,变量和文件句柄),这样每当我从javascript端向它发送请求时,我可以从上次停止的地方继续输出?
我还没有找到一个,这让我相信这种方法是一厢情愿的想法.
我真的很感激一些见解.
javascript ×4
ajax ×1
c++ ×1
canvas ×1
chromium ×1
firefox ×1
getimagedata ×1
html5 ×1
input ×1
php ×1
qt ×1
qtabwidget ×1