【发布时间】:2014-03-30 06:02:10
【问题描述】:
我一直在为 Google Chrome 开发一个扩展程序,它允许用户使用简单的浏览器操作图标将页面共享到 Facebook。它提供了一些额外的功能,例如允许用户搜索过去的链接等。它几乎完美无缺,直到我今天尝试将one particular page (http://imgur.com/gallery/N0s079c) 分享到我的个人 Facebook 帐户。出于多种原因,这对我来说非常令人担忧,因为这可能意味着在其他页面上可能会发生类似的问题,我想在我的用户遇到扩展之前修补它。以下是我的扩展程序如何共享链接的(有点简短)概要:
- 用户单击浏览器操作并从弹出窗口的小菜单中单击“共享”。然后弹出页面使用
chrome.runtime.sendMessage()向活动页面发送消息。 - 事件页面处理传入的消息流并采取适当的行动,调用使用
chrome.tabs.query()的函数来获取当前选项卡。然后,它将这些信息传递给一个函数,该函数查询一个简单的 Web SQL 数据库以获取 URL 的精确匹配,以查看用户之前是否共享过它。如果他们有,如果在继续之前给他们一个基本的confirm()对话框。如果没有,则在继续之前将链接添加到数据库中。我在下面包含了本节的代码。 - 扩展程序处理 URL 并生成 Facebook Feed dialog。
- Facebook Feed 对话框将用户重定向到服务器页面,该页面将用户带回到他们共享的链接或新的 Facebook 帖子,具体取决于他们的设置。
但是,当我尝试分享上面提到的链接时,扩展程序并没有做任何事情。控制台中的事件或弹出页面都没有错误。我不知道可能导致它失败的原因。我唯一能想到的是它是由 Web SQL 查询中的一些极端情况错误引起的。按照当前的设置方式,查询中的错误会导致代码简单地停止执行。这是一个基本的SELECT column FROM table WHERE expression 查询,用于查找完全匹配,所以我觉得不需要编写任何错误处理。
我在 Imgur 上测试了其他几个链接,看看这是否可能是该网站特有的问题,但情况似乎并非如此。
检查共享链接历史/添加到历史的代码
simpleshare.shareLink.checkHistory = function(result) {
simpleshare.backend.database.transaction(function (tx) {
tx.executeSql('SELECT url FROM history WHERE url=\'' + result[0].url + '\'', [], function(tx, results) {
if(results.rows.length != 0) {
reshare = confirm('It appears that you\'ve already shared (or started to share) this link in the past.');
if (reshare == true) {
simpleshare.shareLink.share(result);
};
};
if(results.rows.length == 0) {
var today = new Date();
var month = today.getMonth();
var day = today.getDate();
var year = today.getFullYear();
if (month == 0) {
var monthAsWord = 'January';
};
if (month == 1) {
var monthAsWord = 'February';
};
if (month == 2) {
var monthAsWord = 'March';
};
if (month == 3) {
var monthAsWord = 'April';
};
if (month == 4) {
var monthAsWord = 'May';
};
if (month == 5) {
var monthAsWord = 'June';
};
if (month == 6) {
var monthAsWord = 'July';
};
if (month == 7) {
var monthAsWord = 'August';
};
if (month == 8) {
var monthAsWord = 'September';
};
if (month == 9) {
var monthAsWord = 'October';
};
if (month == 10) {
var monthAsWord = 'November';
};
if (month == 11) {
var monthAsWord = 'December';
};
var fullDate = monthAsWord + ' ' + day + ', ' + year;
tx.executeSql('INSERT INTO history VALUES (\'' + fullDate + '\', \'' + result[0].title + '\', \'' + result[0].url + '\')', [], function(tx, results) {
simpleshare.shareLink.share(result);
});
};
});
});
};
【问题讨论】:
-
不相关,但能否请您使用数组来获取月份名称?
-
仔细检查一下,您只是对这个 imgur URL 有问题(即imgur.com/gallery/N0s079c)?其他 imgur URL 可以与您的扩展程序一起使用吗?
-
@Fresh 是的,出于某种奇怪的原因,它只是那个特定的 imgur URL。我尝试过的所有其他 imgur URL 都可以正常工作。
标签: javascript google-chrome google-chrome-extension web-sql