解决方案 »

  1.   

    写错了,   不应该中Chrome插件, 应该是Chrome扩展程序.
      

  2.   

    这个函数名当然是知道的,  因为目标就是固定的网页. 里面有什么函数, 肯定会提前分析出来.
    chrome扩展程序是可以过虑网站的.
    只是不知道有没有权限调用, 听说是隔离开的, 但是刚接触, 不是很清楚. 所以来请教大家.  
      

  3.   

    我最近正在学习这个,我正好看过关于这部分的开发手册。
    表示,你的插件(1L硬是指正这是扩展程序也是有道理的!表示我和楼主一样,从来不分这个....)的脚本,和原页面的脚本是不可能交互的!他们从属于不同的环境,也就是不同的上下文,不共享任何js变量或者函数,所以你的插件脚本 不能调用原页面的脚本的变脸和函数------插件脚本属于一个叫isolated world的环境,和其它环境都是独立的。
    之所以插件脚本可以定制网页外观,是因为它和原页面脚本共享DOM结构。他们只是都能够对DOM树进行操作罢了!比如原页面脚本可能定义背景色为红色,你再在自己的脚本里面设置成蓝色,最终显示成蓝色,只是对body对象进行了操作而已,但你并不可能说是调用原有的函数进行更改操作的!
    打个比方,A可以用锄头在一块田地上种萝卜,B可以用铲子在这块田地上中白菜,最终这块地上种出来的是什么,由这二者的操作共同影响,但是,A是没有铲子的,B是不会用上锄头的,差不多是这个比喻吧~~~
    ps:我也在学习编写chrome插件,希望可以多多交流呢~
      

  4.   


    虽然js确实不能直接调用页面中的变量和函数, 但是chrome.*  API是提供了接口实现的.   比如chrome.tabs.executeScript接口
    https://developer.chrome.com/extensions/tabs
      

  5.   

    只是现在也有问题, 虽然chrome有这个接口, 但是写到插件里面, 运行时, 又提示说" executeScript"是未定义的
      

  6.   

    http://hi.baidu.com/fl2011/item/6732e2f3da85bc11ce9f329b可以通过content_script, 插入js代码到目标网页, 这样就可以使用executeScript调用本地函数了.
      

  7.   

    看手册的话,我觉得chrome.tabs.executeScript语句是不是应该写在后台脚本里面才行,你会不会写到content_script的脚本里面了,才不能通过?
      

  8.   

    看手册的话,我觉得chrome.tabs.executeScript语句是不是应该写在后台脚本里面才行,你会不会写到content_script的脚本里面了,才不能通过?
    刚才我试验了好久的executeScript接口,我目前测到的结果是:
    通过executeScript注入的脚本和content_script脚本属于同一个上下文(共享js变量和函数),但是还是和原脚本的上下文不同!也就是说,这种方法应该还是不可能实现你要的效果。所不同的是,executeScript是动态加载的,而且需要在后台动态加载,而content_script是访问这个页面的时候就已经加载好的。
    不过你说的,通过content_script调用动态的加载js文件,来实现调用原网页脚本的想法,我觉得很不错!可以试试,不过我目前还没试过啦~要吃饭了,回头去亲测一下
      

  9.   


    你调用executeScript能成功吗, 怎么用的,  chrome版本是多少, 望指教, 我就卡在这里, 动不了.
      

  10.   

    你调用executeScript能成功吗, 怎么用的,  chrome版本是多少, 望指教, 我就卡在这里, 动不了.
    嘿嘿,用点小技巧吧!executeScript的函数,第一个参数传的是tab.id,如果是null的话,应该是当前页面的样子。第二个参数是要注入的js文件(用{file:“sample.js”}对象表示)。
    先得在manifest里面获取注入这个页面的权限,(简单起见,我直接在permission里面添加http://*/),然后在扩展程序管理界面 检查视图: _generated_background_page.html打开后台的console,通过执行两行代码:chrome.tabs.query({active:true},function(tabs){alert(tabs[0].id);});
    chrome.tabs.executeScript(11,{file:"sample.js"});第一行会返回你当前显示页面的tab.id,我看到的是11,所以第二行的时候,把第一个参数改成11,在sample里面设个alert,然后就发现可以成功地alert了,说明sample.js被成功地导入了!
    另外由于http://*/并没有获取到chrome://devtool的权限,所以你在做这个测试的时候,务必记得把当前标签页换成别的,比如百度!我之前就是因为直接在扩展程序管理界面做测试,然后报错说无法获取权限。
      

  11.   


    关键是我调用executeScript的时候, chrome在consloe中直接输出错误提示说   executeScript  未定义, 这是什么原因呢?
      

  12.   

    你用的是F12弹出来的console么?你应该用后台界面的console来调。 chrome右上角“三条杠按钮”==>工具===》扩展程序,然后点你的插件的_generated_background_page.html,就可以调用了。
      

  13.   


    那个executeScript必需在背景页面中才能调用吗, 在注入的js中不能调用吗?
      

  14.   


    那个executeScript必需在背景页面中才能调用吗, 在注入的js中不能调用吗?
    不能,这就是为什么要有background.js,可以在manifest里面设置的。
    "background": { "scripts": ["jquery.min.js", "background.js"] },
      

  15.   


    jquery.min.js  这个东西是什么呢, 我看好多都有这个脚本,  并且这个脚本的代码相当多.没弄过JS, 这个应该是小白问题吧.
      

  16.   


    jquery.min.js  这个东西是什么呢, 我看好多都有这个脚本,  并且这个脚本的代码相当多.没弄过JS, 这个应该是小白问题吧.
    就是导入JQuery库,JQuery的具体描述可以去google一下。我个人感觉是用JQuery可以简化很多js代码,写起来很方便...里面也定义了很多函数,读取、设置DOM元素的值balabala的操作都特别方便.....我也同样小白,正在学习的路上而已....
      

  17.   


    可以加个QQ, 方便联系交流. 希望向你学习下这方面的东西.
    我的QQ是: 744780040
      

  18.   

    通过DOM在文档的<head>标签里面插入script标签,然后再嵌入代码的想法是可行的!毕竟我自己测试的话,成功地调用了原页面的函数~~表示又学到一招
      

  19.   

    你好,我通过jquery向head里append了一个js的function,看页面源代码应该是append上去了,但是执行新增的那个方法的时候,还是不行,提示找不到,这是为啥呢??谢谢啦。。