https://developer.chrome.com/extensions/content_scripts
Content scripts 在一个特殊环境里运行: isolated world.
它被注入到哪个网页,就可以访问到该网页的DOM, 但是无法访问到
该网页的任何JavaScript variables or functions。
在每个content script看来,就好像那个网页没有其它JavaScript 在跑一样。
反过来的角色也是这个样子:那个网页里运行的JavaScript 无法 call any functions or access any variables defined by content scripts.
For example, consider this simple page: 文档里给的这个例子,当按下按钮,两个按钮事件函数都会执行,互不干扰。isolated worlds允许每个content script 都可修改它自己的javascript运行环境, 不必担心会跟页面或者其它content scripts冲突。举个栗子,一个content script可以包含V1版本的jquery,而网页本身包含的是V2版本的jquery,他们互相不会冲突。
isolated worlds的另一个好处,是它把页面的javascript跟extension的javascript完全地分离开了,这允许我们提供那些本不应该在网页上被访问到的功能,不必担心,网页也访问不到它们。
值得一提地是,由page和extension共享的javascript objects,在它们身上发生了什么?举栗来说,对于window.onload事件,每个isolated world看到的都是它眼中那个版本的object, 如果对这个object赋值,它只会影响到您自己的那份object的独立拷贝。举个栗子,page和extension都可以赋函数给window.onload,但是它们每一个都读取不到对方的event handler,event handler们是按照他们被assigned的次序被调用的。
网友评论