javascript - 在html页面中从sqlite收取数据(addon firefox)

标签 javascript jquery sqlite firefox-addon firefox-addon-sdk

我的插件中有一个 html 页面,我可以这样打开:

var buttons = require('sdk/ui/button/action');

var button = buttons.ActionButton({
    id: "mozilla-link",
    label: "Visit Mozilla",
    icon: {
        "16": "./icon-16.png",
        "32": "./icon-32.png",
        "64": "./icon-64.png"
    },
    onClick: handleClick
});

function handleClick(state) {
    var tabs = require("sdk/tabs");
    tabs.open({
        url: self.data.url("panel.html"),
        inBackground: false
    });
}

效果符合预期,但现在我想从 sqlite 数据库加载一些数据。

我已经在模块的工作流程中使用数据库,如下所示:

var database = Services.dirsvc.get("ProfD", Ci.nsIFile);
database.append("searchEngines.sqlite");
dbConn = Services.storage.openDatabase(database);
var stmt = dbConn.createStatement("SELECT * FROM table;");
while (stmt.executeStep()) {
    engines[stmt.row.exp] = {b : stmt.row.b};
}
stmt.finalize();

现在我想在我的 html 页面上传递这些信息(如果可能的话通过 JQuery)。

我听说过 .port.emit 的事情,我认为我必须使用它,但我不明白如何使用。

最佳答案

在您的 tabs.open 中调用,添加属性onReady (还有一些其他 onEvents 可能会起作用)并将其值设置为以下函数:

onReady: function (tab) {
 var worker = tab.attach({
   contentScriptFile: [self.data.url("jquery-2.1.1.min.js"), self.data.url("panel.js")]
 });
 worker.port.emit("customEventName", "message");
 worker.port.on("otherCustomEventName", function (stringData) {
   // Whatever you want to do with string value stringData
 });
}

如果要访问 worker = ...,请使用(更多)全局上下文中的变量( var 不带 worker.port.emit ) onReady 中的函数之外属性(property)。 worker.port.on是持久的,因此您不需要在函数范围之外创建任何这些。在内容脚本方面,使用 self.port.emit("eventName", messageString)self.port.on("mainScriptEventName", function (stringFromMainScript) {/* do whatever */}) 。 SQLite 查询将在主脚本中完成。

关于javascript - 在html页面中从sqlite收取数据(addon firefox),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24897764/

相关文章:

javascript - 获取包含日期的文本框的值?

javascript - Firefox 新版本 console.log 问题

javascript - 如何定位在 php 中没有任何 ID 或标记的 <span> 元素的 innerHTML?

javascript - 如何检查 div 中的 span 是否包含特定文本?

java - Android Room Sqlite 没有这样的列,而不是在 WHERE 条件下使用等号 (=)

mysql - 关系划分

java - 我为本地 sqlite 数据库创建了应​​用程序,但它没有运行。请告诉我解决方案

javascript - 溢出的可滚动 div :hidden in FireFox 3. 6.x

javascript - AngularJS:如何将 http 调用与变量同步?

jQuery 将数据发布到错误的相对 URL