我在内容脚本中遇到了一个奇怪的问题。"run_at" : "document_end"
内容脚本在清单中定义。页面加载后,脚本会在页面中插入一个对象标签(如果具有预定义 id 的标签尚不存在),并在其中设置一些属性,例如type
、width
、height
、innerHTML
和title
。在这里一切正常。
function checkForObject()
{
var obj = document.getElementById("unique_id");
if(obj == null)
{
var d = document.createElement("object");
d.id = "unique_id";
d.width = "1";
d.height = "1";
d.type = "application/x-y-z";
d.title = "1000";
d.style.position = "absolute";
d.style.left = "0px";
d.style.top = "0px";
d.style.zIndex = "1";
document.getElementsByTagName("body")[0].appendChild(d);
}
}
checkForObject();
我在页面 html 代码中看到了新对象,其属性中有正确的值。
一段时间后,我需要title
在同一内容脚本中读取对象的属性。代码很简单:
function ReadTitle()
{
var obj = document.getElementById("unique_id");
var value = obj.title; // breakpoint
console.log(value);
// TODO: want to use proper title value here
}
该函数是从 background.html 页面调用的:
chrome.tabs.onActivated.addListener(
function(info)
{
chrome.tabs.executeScript(info.tabId, {code: 'setTimeout(ReadTitle, 250);'});
});
不幸的是,ReadTitle
我得到的不是我所期望的。title
我看到记录的值不是当前值,而是:
function title() { [native code] }
如果我在注释标记的行设置断点// breakpoint
,我会在观察者中看到所有对象属性(包括title
)都是正确的。然而,变量value
获得了上述描述性字符串。
显然,我错过了一些简单的事情,但我无法弄清楚。
答案。这是托管使用类型对象的 npapi 插件中的一个错误。对于所有阅读此问题并有意提供帮助的人,我深表歉意。