Chrome扩展程序:显示隐藏元素并单击它

时间:2017-08-01 06:12:22

标签: jquery google-chrome-extension content-script

我正在编写一个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:但这根本没有任何效果,我甚至可以查看开发人员工具,该属性的值是不是改变了。

我真的不知道我还能尝试什么,知道我做错了什么,或者我能尝试什么?

1 个答案:

答案 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,但没有必要注入它,因为它也用在原始页面中。

相关问题