我希望为特定网站创建扩展程序,以提供他们目前没有的其他格式和共享选项。
我遇到了正确沟通的问题,似乎没有一个明确的例子。
清单:
{
"name": "Test",
"description": "Testing.",
"version": "1.0",
"background_page": "background.html",
"permissions": [
"tabs", "http://www.sitedomain.com/*"
],
"content_scripts": [
{
"matches": ["*://*.sitedomain.com/*"],
"js": ["jquery.min.js", "test.js"],
"css": ["test.css"]
}
]
}
内容脚本:
$(document).ready(function () {
alert('test js fired');
$("#ColumnContainer div.item").each(function () {
$(this).css("background-color", "skyBlue");
var itemId = $(this).children("a.itemImage").attr("href");
$(this).children(".details").append("<a href=\"javscript:void(false);\" onclick=\"gotoItem('" + itemId + "');\">Goto Item</a>");
});
});
chrome.extension.onRequest.addListener(function (request, sender, sendResponse) {
alert('listener request');
alert(request);
});
背景HTML的JavaScript:
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
if (changeInfo.status == "complete") {
if (tab.url.indexOf("sitedomain.com") > -1) {
chrome.tabs.executeScript(null, {file: "test.js"});
}
}
});
chrome.tabs.sendRequest(tabId, request, responseCallback);
function responseCallback() {
alert('response callback');
}
function gotoItem(itemId) {
alert('goto Item - ' + itemId);
}
上面的代码会在加载sitedomain.com
时附加链接并更改客户端页面上的样式。但是,我没有幸运获得gotoItem
方法,Chrome开发工具显示未定义。我尝试了各种组合,但还不能完全掌握听众和请求。
我真的很想看到一个干净的样本,它只是展示了如何从每个站点调用方法。
答案 0 :(得分:1)
我发现您的代码存在两个问题。 1)gotoItem
函数在后台页面中定义,content_scripts
无法访问那里的函数。 2)content_scripts
和他们注入的网页上的javascript无法互动,因此您的onclick
不能成为链接html的一部分。
修复#1就像将gotoItem
函数移到content_script
中一样简单。
要修复#2,以下内容应该有效。
$("#ColumnContainer div.item").each(function(){
$(this).css("background-color","skyBlue");
var itemId = $(this).children("a.itemImage").attr("href");
var $link = $('<a href="javscript:void(false);">Goto Item</a>');
$link.click(function() {
gotoItem(itemId);
}
$(this).children(".details").append($link);
});
您可能需要修改itemId
的传递方式。