1

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

我试过把它放在manifest.json文件中,但wgxpath.install()失败。在下面的示例中,alert.js激发它的警报,并且inject.js运行并在源选项卡中可用。尽管没有WGXPath。

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

由于

+0

你为什么不把它放到你的view html body中? :) – Lashus

+0

@Lusus:这是一个内容脚本。没有视图 - 它适用于所有网址。 – gkalpak

+0

不知道那么,对不起。我的猜测是,因为评估是一个安全违规行为,它不会被执行。 http://developer.chrome.com/apps/sandboxingEval.html – Lashus

回答

0

根据该文档为Wicked-Good-XPathwgxpath.install()确保XPATH评价函数“...是在窗口对象上定义。”

按照文档的浏览器扩展程序Content Scripts,内容脚本在一个孤立的世界(JS上下文)“活的”,至于window对象属性关注:

“每个孤立的世界看到它自己的版本的对象。分配给对象影响你的对象的独立副本。“


我还没有尝试过自己,但最有可能你需要有Wicket的良好-的XPath在网页(而不是内容脚本)的JS背景下,所以你应该把你的内容脚本添加script元素,src指向wgxpath.install.js文件,然后在网页的JS上下文中执行wgxpath.install()
此外,您需要将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"] 

injected.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,你可能需要在Web页面的JS上下文中注入更多的代码(或者在两个JS上下文之间进行通信的方式)。


BTW,this answer是的几种方法你可以注入代码或内容脚本插入到网页,使用的是Chrome扩展了很好的参考。

+0

优秀的答案,注射技术很好,谢谢。可悲的是现在所有的xpath都得到了NotSupportedError,但我怀疑这是一个单独的问题。 – gregn

相关问题