2016-11-07 58 views
1

在我的一个组件中,当组件加载时,我希望我的扩展将脚本注入到运行扩展的当前选项卡中。该脚本实质上获取源代码并将其保存为字符串。如何在反应中使用tabs.executeScript

所以,在我componentWillMount我试图注入脚本以下列方式...

componentWillMount() { 

    var result = ''; 
    chrome.tabs.executeScript(null, { 
     file: './js/scripts/getPageSource.js' 
    }, function() { 
     // If you try and inject into an extensions page or the webstore/NTP you'll get an error 
     if (chrome.runtime.lastError) { 
      result = 'There was an error injecting script : \n' + chrome.runtime.lastError.message; 

     } 
    }); 
} 

我的脚本的路径,./js/scripts/getPageSource.js是相对于我的index.html文件正在使用我的应用程序的反应。

我得到的错误文件没有找到,所以我改变了相对于组件的路径,但我仍然找不到文件。

我在想也许这不是正确的方式注入一个脚本到反应的开放标签,有没有更好的方式做到这一点?

编辑

这是我manifest.json文件...

{ 
    "name": "Get pages source", 
    "version": "1.0", 
    "manifest_version": 2, 
    "description": "Get pages source from a popup", 
    "browser_action": { 
    "default_popup": "src/index.html" 
    }, 
    "permissions": ["tabs", "<all_urls>"] 
} 

我的路径./js/scripts/getPageSource.js位于我src文件夹内被上述

+0

@Makyen如果你需要我补充清单文件和脚本调用,我可以这样做。但我的主要问题是我试图注入一个脚本,并没有被调用。据我所知,你不需要知道剧本对你的作用是什么? – Bolboa

+0

@Makyen好吧我添加了它 – Bolboa

回答

3

使用是相对路径引用您的manfest.json文件。

MDN states:

在Firefox中,相对URL是相对于当前页面的URL解决。在Chrome中,这些网址是,相对于加载项的基本网址已得到解决。

从你的manifest.json,它看起来像你的file应该是:

file: 'src/js/scripts/getPageSource.js'