1

如何使wicked-good-xpath库可用于 chrome 扩展的内容页面?

我尝试将它放在 manifest.json 文件中,但 wgxpath.install() 失败。在下面的示例中,alert.js 触发它的警报并注入。js 运行并在源选项卡中可用。虽然没有 WGXPath。

  "content_scripts": [
    {
      "matches" : ["<all_urls>"],
      "js"      : ["res/js/alert.js", "res/js/wgxpath.install.js", "injected.js" ],
      "run_at"  : "document_end"
    }
  ],

谢谢

4

1 回答 1

0

根据Wicked-Good-XPath的文档,wgxpath.install()确保 XPAth 评估函数“......在窗口对象上定义”。.

根据 Chrome 扩展内容脚本的文档,内容脚本“生活”在一个孤立的世界(JS 上下文)中,并且就window对象属性而言:

“每个孤立的世界都会看到自己的对象版本。分配给对象会影响您对该对象的独立副本。”


我自己没有尝试过,但很可能您需要在网页的 JS 上下文中使用 Wicket-Good-XPath(而不是内容脚本),因此您应该让内容脚本添加一个script元素,并带有一个src指向到wgxpath.install.js文件,然后wgxpath.install()在网页的 JS 上下文中执行。
此外,您需要将wgxpath.install.js文件添加到扩展的web_accessible_resources.

示例代码:

manifest.json中:

...
"content_scripts": [{
    ...
    "js": ["res/js/alert.js", "injected.js"],
    ...
}],
"web_accessible_resources": ["/res/js/wgxpath.install.js"]

注入的.js中:

/* "Embed" `wgxpath.install.js` into the web-page */
var script = document.createElement("script");
script.type = "text/javascript";
script.src = chrome.extension.getURL("/res/js/wgxpath.install.js");
document.body.appendChild(script);

/* "Install" Wicked-Good-XPath into the web-pages context */
var script = document.createElement("script");
script.type = "text/javascript";
script.textContent = "wgxpath.install();";
document.body.appendChild(script);
/*Optionaly*/script.parentNode.removeChild(script);

根据您想要使用 Wicked-Good-XPath 的方式,您可能需要将更多代码注入网页的 JS 上下文(或设备一种在两个 JS 上下文之间进行通信的方式)。


顺便说一句,这个答案是您可以使用 Chrome 扩展程序将代码或内容脚本注入网页的几种方法的一个很好的参考。

于 2013-11-27T13:26:39.927 回答