Skip to content
This repository was archived by the owner on Jul 23, 2024. It is now read-only.

Commit 63142d7

Browse files
committed
Open url in a new tab
1 parent 8ba4f55 commit 63142d7

7 files changed

Lines changed: 74 additions & 3 deletions

File tree

extension/experiments/inspectedNode/api-client.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@
6868
};
6969

7070
port.onMessage.addListener(listener);
71-
port.postMessage({ method, timestamp });
71+
port.postMessage({
72+
namespace: "browser.experiments.inspectedNode",
73+
method,
74+
timestamp,
75+
});
7276
});
7377
}
7478
};

extension/experiments/inspectedNode/api-server.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ browser.runtime.onConnect.addListener(port => {
1414
port.postMessage({ method: "onChange" });
1515
}
1616

17-
const onMessage = async ({ method, timestamp }) => {
17+
const onMessage = async ({ namespace, method, timestamp }) => {
18+
if (namespace !== "browser.experiments.inspectedNode") {
19+
return;
20+
}
21+
1822
switch (method) {
1923
case "onChange": {
2024
browser.experiments.inspectedNode.onChange.addListener(onChange, clientId);

extension/manifest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
],
1414
"background": {
1515
"scripts": [
16-
"experiments/inspectedNode/api-server.js"
16+
"experiments/inspectedNode/api-server.js",
17+
"proxy/tabs/api-server.js"
1718
]
1819
},
1920
"devtools_page": "devtools.html",

extension/proxy/tabs/api-client.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"use strict";
2+
3+
// We can not call any browser.tabs APIs in devtools page context.
4+
// Thus, introduce api-server / api-client that provides pseudo api to make the api
5+
// accessible even in devtools page context.
6+
//
7+
// This script should run on devtools page context.
8+
9+
(async function install() {
10+
if (browser.tabs) {
11+
return;
12+
}
13+
14+
const port = browser.runtime.connect();
15+
16+
browser.tabs = {
17+
async create(option) {
18+
port.postMessage({
19+
namespace: "browser.tabs",
20+
method: "create",
21+
option,
22+
});
23+
},
24+
};
25+
})();

extension/proxy/tabs/api-server.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"use strict";
2+
3+
// We can not call any browser.tabs APIs in devtools page context.
4+
// Thus, introduce api-server / api-client that provides pseudo api to make the api
5+
// accessible even in devtools page context.
6+
//
7+
// This script should run on addon parent context (as background).
8+
9+
browser.runtime.onConnect.addListener(port => {
10+
const onMessage = async ({ namespace, method, option }) => {
11+
if (namespace !== "browser.tabs") {
12+
return;
13+
}
14+
15+
switch (method) {
16+
case "create": {
17+
browser.tabs.create(option);
18+
break;
19+
}
20+
}
21+
};
22+
port.onMessage.addListener(onMessage);
23+
24+
const onDisconnect = () => {
25+
port.onDisconnect.removeListener(onDisconnect);
26+
port.onMessage.removeListener(onMessage);
27+
};
28+
port.onDisconnect.addListener(onDisconnect);
29+
});

extension/sidebar-pane.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@
166166
}
167167
</style>
168168
<script src="experiments/inspectedNode/api-client.js"></script>
169+
<script src="proxy/tabs/api-client.js"></script>
169170
<script type="module" src="sidebar-pane.js"></script>
170171
</head>
171172
<body>

extension/sidebar-pane.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,18 @@ function _renderTerm(text, classes = [], url = null) {
271271
if (url) {
272272
termEl.href = url;
273273
termEl.title = url;
274+
termEl.addEventListener("click", _onClickLink);
274275
}
275276

276277
return termEl;
277278
}
278279

280+
function _onClickLink(e) {
281+
e.stopPropagation();
282+
e.preventDefault();
283+
browser.tabs.create({ url: e.target.href });
284+
}
285+
279286
async function _updateCSSValueEnabled() {
280287
const isCSSValueEnabled = await _userSettings.isCSSValueEnabled();
281288
_webcompat.setCSSValueEnabled(isCSSValueEnabled);

0 commit comments

Comments
 (0)