ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Google Chrome扩展与Web页面/服务器之间的交互 - 通过content scripts,可以实现Google Chrome扩展与用户打开的Web页面之间的交互。 - 通过跨域的 XMLHttpRequest,可以实现Google Chrome扩展与其他服务器之间的交互。 content scripts是一组JavaScript文件,运行在浏览器当前打开的页面的上下文中,可以读取并修改当前打开的页面DOM结构。事实上,content scripts可以被看作是当前打开的页面的组成部分。 所谓[content-scripts](https://developer.chrome.com/extensions/content_scripts),其实就是Chrome插件中向页面注入脚本的一种形式(虽然名为script,其实还可以包括css的),借助`content-scripts`我们可以实现通过配置的方式轻松向指定页面注入JS和CSS(如果需要动态注入,可以参考下文),最常见的比如:广告屏蔽、页面CSS定制,等等。 `content-scripts`和原始页面共享DOM,但是不共享JS,如要访问页面JS(例如某个JS变量),只能通过`injected js`来实现。`content-scripts`不能访问绝大部分`chrome.xxx.api`,除了下面这4种: - chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest) - chrome.i18n - chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage) - chrome.storage 非要调用其它API的话,你还可以通过通信来实现让background来帮你调用 **示例配置:** ``` <pre class="calibre10">``` <span class="token3">{</span> <span class="token">// 需要直接注入页面的JS</span> <span class="token2">"content_scripts"</span><span class="token3">:</span> <span class="token3">[</span> <span class="token3">{</span> <span class="token">//"matches": ["http://*/*", "https://*/*"],</span> <span class="token">// "<all_urls>" 表示匹配所有地址</span> <span class="token2">"matches"</span><span class="token3">:</span> <span class="token3">[</span><span class="token2">"<all_urls>"</span><span class="token3">]</span><span class="token3">,</span> <span class="token">// 多个JS按顺序注入</span> <span class="token2">"js"</span><span class="token3">:</span> <span class="token3">[</span><span class="token2">"js/jquery-1.8.3.js"</span><span class="token3">,</span> <span class="token2">"js/content-script.js"</span><span class="token3">]</span><span class="token3">,</span> <span class="token">// JS的注入可以随便一点,但是CSS的注意就要千万小心了,因为一不小心就可能影响全局样式</span> <span class="token2">"css"</span><span class="token3">:</span> <span class="token3">[</span><span class="token2">"css/custom.css"</span><span class="token3">]</span><span class="token3">,</span> <span class="token">// 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle</span> <span class="token2">"run_at"</span><span class="token3">:</span> <span class="token2">"document_start"</span> <span class="token3">}</span> <span class="token3">]</span><span class="token3">,</span> <span class="token3">}</span> ``` ``` > 特别注意,如果没有主动指定`run_at`为`document_start`(默认为`document_idle`),下面这种代码是不会生效的: ``` <pre class="calibre17">``` document<span class="token3">.</span><span class="token4">addEventListener</span><span class="token3">(</span><span class="token2">'DOMContentLoaded'</span><span class="token3">,</span> <span class="token5">function</span><span class="token3">(</span><span class="token3">)</span> <span class="token3">{</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">'我被执行了!'</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span><span class="token3">)</span><span class="token3">;</span> ``` ```