小编Rik*_*tor的帖子

PageM将worker多次附加到同一URL

发现清洁溶液

我找到了一个非常干净的解决方案,它真的让整个问题变得毫无意义,我确信当我提出这个问题时它就存在了......我也很无知也在寻找它.

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)

javascript firefox firefox-addon firefox-addon-sdk

9
推荐指数
1
解决办法
1156
查看次数

Chrome扩展程序弹出窗口中的文件输入

我希望用户能够通过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

9
推荐指数
1
解决办法
2406
查看次数

使用getImageData - HTML5 2d Context丢失透明度

我发现了一个奇怪的问题getImageData; 在获取图像数据时,图像的透明度似乎被忽略.

由于canvas在获得图像数据之前需要将任何图像绘制到a ,我认为这是一个问题,因为canvas该问题是不透明的.但我错了,因为canvasdrawImage保持透明度时使用作为参数.

这是我加载图像的方式;

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)

javascript html5 canvas getimagedata

6
推荐指数
1
解决办法
2976
查看次数

未检测到QTabWidget的信号

我的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)

c++ qt qtabwidget

3
推荐指数
1
解决办法
1247
查看次数

在Javascript和PHP之间进行通信

我一直在玩用javascript/PHP模拟命令行的想法.基本的想法是,我希望能够像在命令行上一样运行c ++程序.

我使用javascript创建了一个基本控制台,并使用C++的代码解析器将某些内容添加到原始源,以使我的PHP程序执行脚本能够识别何时有输入请求或程序何时结束.现在,我希望能够以这样的方式在javascript(控制台web应用程序)和PHP(程序执行)之间进行通信,以便PHP可以告诉javascript显示什么(输出)和请求输入.

我用AJAX计划了它.一旦用户在控制台(javascript端)上输入程序运行命令,它将切换到执行状态并向具有程序名称的PHP脚本发送请求.该脚本将启动该过程并通过回显结果结束.根据请求响应,javascript将再次向PHP脚本发送请求,该脚本将从其离开的位置进行选择并回显另一个结果以便javascript接收.这将持续到PHP脚本回显错误字符串或终止字符串.

经过AJAX的许多天真尝试后,我知道我的想法是完全错误的.我一直在想是否有另一种方法可以在两端之间进行通信.有没有办法可以保存我的PHP脚本的状态(资源,变量和文件句柄),这样每当我从javascript端向它发送请求时,我可以从上次停止的地方继续输出?

我还没有找到一个,这让我相信这种方法是一厢情愿的想法.

我真的很感激一些见解.

javascript php ajax

0
推荐指数
1
解决办法
429
查看次数