我正在编写一个chrome扩展来从我订阅的网站上获取一些数据(我有理由相信我可以,我只是想恢复我自己插入的数据)。到目前为止,内容脚本似乎足以支持我的扩展架构。现在,如果我有像以下
这样的简单元素<button class="button btn btn-default paginateItems">
...
</button>
我可以很容易地找到它(使用jquery)并单击它,它会在我以用户身份点击它时执行的操作。但我有一个像这样的隐藏元素的问题:
<button id="dropdown01" class="btn btn-default text-center icon-punti font18" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
...
</button>
...
<ul class="dropdown-menu pull-right yellow-bg" aria-labelledby="dropdown01">
<li class="opensans_bold font12 align-center">
<a href="#" class="edit-element" data-id="123123" data-toggle="modal" >
...
</a>
</li>
如果我选择并点击链接,则没有任何反应。嗯,我想,那一定是因为它隐藏在隐藏的<li>
后面,所以让我们点击下拉按钮弹出菜单。但是,如果我这样做,我可以看到点击已完成,因为按钮外观发生了变化,但弹出窗口没有显示出来。所以我想,好吧,让我们将按钮的aria-expanded
属性更改为true:但这根本没有任何效果,我甚至可以查看开发人员工具,该属性的值是不是改变了。
我真的不知道我还能尝试什么,知道我做错了什么,或者我能尝试什么?
答案 0 :(得分:2)
感谢@wOxxOm提供解决方案。我必须做的是在我正在爬行的页面中注入javascript,当然还有我的javascript引用的库;所以我写了一个包含以下代码的content-script.js
:
var scripts = ['FileSaver.min.js', 'jszip.min.js', 'myscript.js'] ;
for (var i = 0 ; i < scripts.length ; i++) {
var s = document.createElement('script');
s.src = chrome.extension.getURL(scripts[i]);
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
}
,即我在wOxxOm using jQuery of the page itself建议的链接中找到的简单循环改编。我必须注入的库也必须被声明为#34; Web可访问的资源&#34;,所以我必须将以下内容放在manifest.json
中:
"content_scripts": [
{
"matches": ["http://*.anobii.com/*/profile"],
"js": ["content-script.js"]
}
],
"web_accessible_resources": [ "FileSaver.min.js", "jszip.min.js", "myscript.js" ],
没有必要改变我用来启动我的脚本的技术,我会提到它的完整性:我选择了一个合理的位置在原始页面中插入一个新的链接,然后我添加了一个新的链接将运行一个功能。在myscript.js
:
$(document).ready(function(){
var newdiv =
'<div id="myscrit-link-div">\n' +
' <a href="#" id="myscript-activate">Run script</a>\n' +
'</div>\n' ;
}) ;
$('#original-doc-div').append(newdiv) ;
$('#myscript-activate').click(myscriptMainFunction) ;
正如你所看到的,我在我的脚本中使用了jQuery,但没有必要注入它,因为它也用在原始页面中。