tencent-cos-extension

想实现一款插件,对接腾讯图床。

Tencent COS

想实现一款插件,对接腾讯图床。

遇到的问题:如果把网页上的图片直接传到图床中,这里给出思路,通过图片 url 将图片 变为 base64 的格式,然后将 base64 各式变为 blob 格式。(为啥不直接把图片变为 blob ?,因为我只是个业余javascript选手)

然后在上传图片的过程中,指定 ContentType 为图片类型(官方文档没有这个属性呀。没有?他们忘写了。)

下面是些插件遇到的问题(没错,我还是个业余的chrome-extension选手)

关于popup

Question 1

如何让 popup.html 以弹出的方式进行工作?
上面的问题分为2种情况

  • 第一种是 background.js 监听 browserAction 的情况下,只要 browserAction 被点击了,就将 popup 以弹出的方式工作。

  • 第二种是 browserAction 已默认的方式使用,而达到某个出发条件后,将 popup 以弹出的方式工作。

情况二

情况二的问题更少些,放在前面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//在某个事件被触发时
function initPopupPage(url = 'popup.html', callback) {
var w = 800;
var h = 550;
var left = Math.round((screen.width / 2) - (w / 2));
var top = Math.round((screen.height / 2) - (h / 2));
chrome.windows.create({
url : url,
width : w,
height : h,
focused : true,
'left' : left,
'top' : top,
type : 'popup'
}, callback);
}
initPopupPage(undefined,(win)=>{

// 监听页面是否加载完
chrome.tabs.onUpdated.addListener(function (id , info) {
if (info.status === 'complete' && id === tabId) {
// background 与 弹出的 popup 通信
chrome.tabs.sendMessage(tabId,{'url':data.Location},(data)=>{
//console.log(data);
});
}
});
});

情况一

情况一以经表明,要监听 browserAction 。如果要通过这种情况,可以在 background.js 中注册监听函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// background.js
//具体的函数细节可以查阅官方文档。
chrome.browserAction.onClicked.addListener(function (tab) {
var w = 800; //长
var h = 550; //宽
var left = Math.round((screen.width / 2) - (w / 2)); //屏幕坐标
var top = Math.round((screen.height / 2) - (h / 2)); //屏幕坐标
chrome.windows.create({
url : 'popup.html',
width : w,
height : h,
focused : true,
'left' : left,
'top' : top,
type : 'popup' //类型(有坑)
});
});

注意,这种情况下,存在一个问题,如果要通过监听的方式打开 popup.html 那么在 manifest.json 中不能注册 "default_popup": "popup.html"这条信息,否则监听无效。

下面说一下,在做这2个东西时候遇到的坑。

如上面代码所示,在chrome.windows.create中,明明有指定type的类型为 popup,但是如果通过下面的代码获取 popup 是无法获取到的。但是下面的代码可以获取 "default_popup": "popup.html"情况下的 popup页面。

1
var views = chrome.extension.getViews({type:'popup'});

但通过测试发现,要用下面的方式。

1
var views = chrome.extension.getViews({type:'tab'});

也就是说,创建出的页面仍然是 tab的类型。