contentScript: self.on('click', function() { tabs.open(url) }) - 我无法在此处打开新标签
contentScript: self.on('click', function() { tabs.open(url) }) - I can't open new tab here
在我的菜单项中,用户看到已翻译的选定文本 - 这是在 onMessage
中执行的(现在我无法翻译并在此功能中打开选项卡 - 只能翻译),我不明白- 我如何在用户单击项目后打开新选项卡 - tabs.open
在 contentScript
不工作,即使在 contentScript
我调用了一个函数,或者如果我更改为 contentScriptFile
.我的插件代码:
var contextMenu = require("sdk/context-menu");
var Request = require("sdk/request").Request;
var self = require('sdk/self');
var tabs = require('sdk/tabs');
var translating = 'translating...';
var menuItem = contextMenu.Item({
label: translating,
image: self.data.url('ico.png'),
context: contextMenu.SelectionContext(),
contentScript: 'self.on("context", function() {' +
'self.postMessage(window.getSelection().toString());' +
'return true;' +
'});' +
'self.on("click", function() {' +
'tabs.open("https://translate.yandex.by/?text=" + window.getSelection().toString());' + // this is not working here
'})',
onMessage: function(selectionText) {
menuItem.label = translating;
Request({
url: "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150402T173446Z.82a90fe78ca2aeaf.a3bd7c7a0f72b260e28f5d92e4f242cf6ba189d3&lang=ru&text="+selectionText,
onComplete: function(response) {
var translated = response.json.text[0];
menuItem.label = translated;
}
}).get();
}
});
你真的很接近。 'tabs' 对象仅在 index.js 中可用 - 您需要将作为 'contentScript' 属性 提供的评估代码视为完全不同的环境。我已经更新了代码,基本上不同的是我通过 postMessage 将 yandex url 发送回 index.js 以便我可以在 index.js:[=12= 中打开选项卡]
var contextMenu = require("sdk/context-menu");
var Request = require("sdk/request").Request;
var self = require('sdk/self');
var tabs = require('sdk/tabs');
var translating = 'translating...';
var menuItem = contextMenu.Item({
label: translating,
image: self.data.url('ico.png'),
context: contextMenu.SelectionContext(),
contentScript: 'self.on("context", function() {' +
'var selectionText = window.getSelection().toString();' +
'self.postMessage({name:"context",data:selectionText});' +
'return true;' +
'});' +
'self.on("click", function() {' +
'var selectionText = window.getSelection().toString();' +
'self.postMessage({name:"click", data:"https://translate.yandex.by/?text=" + selectionText});' +
'})',
onMessage: function(message) {
if (message.name === 'context') {
// handle the context message
menuItem.label = translating;
Request({
url: "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150402T173446Z.82a90fe78ca2aeaf.a3bd7c7a0f72b260e28f5d92e4f242cf6ba189d3&lang=ru&text="+selectionText,
onComplete: function(response) {
var translated = response.json.text[0];
menuItem.label = translated;
}
}).get();
}
else if (message.name === 'click') {
// handle the click message
tabs.open(message.data);
}
}
});
有关此主题的详细信息,请参阅有关 how content scripts work 的 SDK 详尽文档。
在我的菜单项中,用户看到已翻译的选定文本 - 这是在 onMessage
中执行的(现在我无法翻译并在此功能中打开选项卡 - 只能翻译),我不明白- 我如何在用户单击项目后打开新选项卡 - tabs.open
在 contentScript
不工作,即使在 contentScript
我调用了一个函数,或者如果我更改为 contentScriptFile
.我的插件代码:
var contextMenu = require("sdk/context-menu");
var Request = require("sdk/request").Request;
var self = require('sdk/self');
var tabs = require('sdk/tabs');
var translating = 'translating...';
var menuItem = contextMenu.Item({
label: translating,
image: self.data.url('ico.png'),
context: contextMenu.SelectionContext(),
contentScript: 'self.on("context", function() {' +
'self.postMessage(window.getSelection().toString());' +
'return true;' +
'});' +
'self.on("click", function() {' +
'tabs.open("https://translate.yandex.by/?text=" + window.getSelection().toString());' + // this is not working here
'})',
onMessage: function(selectionText) {
menuItem.label = translating;
Request({
url: "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150402T173446Z.82a90fe78ca2aeaf.a3bd7c7a0f72b260e28f5d92e4f242cf6ba189d3&lang=ru&text="+selectionText,
onComplete: function(response) {
var translated = response.json.text[0];
menuItem.label = translated;
}
}).get();
}
});
你真的很接近。 'tabs' 对象仅在 index.js 中可用 - 您需要将作为 'contentScript' 属性 提供的评估代码视为完全不同的环境。我已经更新了代码,基本上不同的是我通过 postMessage 将 yandex url 发送回 index.js 以便我可以在 index.js:[=12= 中打开选项卡]
var contextMenu = require("sdk/context-menu");
var Request = require("sdk/request").Request;
var self = require('sdk/self');
var tabs = require('sdk/tabs');
var translating = 'translating...';
var menuItem = contextMenu.Item({
label: translating,
image: self.data.url('ico.png'),
context: contextMenu.SelectionContext(),
contentScript: 'self.on("context", function() {' +
'var selectionText = window.getSelection().toString();' +
'self.postMessage({name:"context",data:selectionText});' +
'return true;' +
'});' +
'self.on("click", function() {' +
'var selectionText = window.getSelection().toString();' +
'self.postMessage({name:"click", data:"https://translate.yandex.by/?text=" + selectionText});' +
'})',
onMessage: function(message) {
if (message.name === 'context') {
// handle the context message
menuItem.label = translating;
Request({
url: "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150402T173446Z.82a90fe78ca2aeaf.a3bd7c7a0f72b260e28f5d92e4f242cf6ba189d3&lang=ru&text="+selectionText,
onComplete: function(response) {
var translated = response.json.text[0];
menuItem.label = translated;
}
}).get();
}
else if (message.name === 'click') {
// handle the click message
tabs.open(message.data);
}
}
});
有关此主题的详细信息,请参阅有关 how content scripts work 的 SDK 详尽文档。