Chrome扩展的内容脚本(Content Scripts)是一种运行在网页上下文中的脚本,它可以访问和操作网页的DOM,但不能直接访问网页脚本定义的JavaScript变量或函数。聚合物(Polymer)是一种用于构建Web组件的JavaScript库,它允许开发者创建可复用的自定义元素。
是否可以从Chrome扩展的内容脚本访问在主窗口中创建的聚合物元素的属性?
内容脚本运行在隔离的环境中,虽然可以访问和操作DOM,但不能直接访问网页脚本定义的JavaScript变量或函数。聚合物元素是由网页脚本创建和管理的,因此内容脚本无法直接访问这些元素的属性。
// 内容脚本
chrome.runtime.sendMessage({action: "getPolymerElementProperty", elementId: "myElement"}, function(response) {
console.log(response.property);
});
// 后台脚本
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.action === "getPolymerElementProperty") {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
func: getPolymerElementProperty,
args: [request.elementId]
}, function(result) {
sendResponse({property: result.result});
});
});
}
});
// 网页脚本
function getPolymerElementProperty(elementId) {
const element = document.getElementById(elementId);
return element.property;
}
window
对象调用这个函数。// 网页脚本
window.getPolymerElementProperty = function(elementId) {
const element = document.getElementById(elementId);
return element.property;
};
// 内容脚本
const property = window.getPolymerElementProperty("myElement");
console.log(property);
通过上述方法,可以在一定程度上解决内容脚本访问聚合物元素属性的问题。
领取专属 10元无门槛券
手把手带您无忧上云