Nis*_*rma 10 javascript bho bookmarklet javascript-injection google-chrome-extension
根据维基百科关于Bookmarklets的文章(http://en.wikipedia.org/wiki/Bookmarklet),Bookmarklets的概念是:
Web浏览器将URI用于标记的href属性和书签.URI方案(例如http:,file:或ftp:)指定协议和字符串其余部分的格式.浏览器还实现了一个前缀javascript:对解析器来说就像任何其他URI一样.在内部,浏览器看到指定的协议是javascript,将字符串的其余部分视为JavaScript应用程序然后执行,并将结果字符串用作新页面.
它表示结果字符串用作新页面.那么这是否意味着浏览器的原始DOM不受该字符串的影响?但是,如果只将结果字符串用作新页面,我如何在现有DOM中更改或注入新的DOM元素?因为脚本提醒Hello或注入一些新的DOM元素并没有真正返回任何内容.他们有点在现有的DOM上工作.
现在,在Internet Explorer中,除了使用Bookmarklets在页面上执行一些JavaScript之外,我还可以编写一个BHO插件并按以下方式注入:
document = (HTMLDocument)webBrowser.Document;
var injectedJS = System.IO.File.ReadAllText("InjectedJS.js");
var window = document.parentWindow;
window.execScript("(function(){ " + injectedJS + " })()");
Run Code Online (Sandbox Code Playgroud)
同样在chrome中,我可以编写一个扩展来实现同样的目的:
var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)
这些有何不同?我所拥有的高级问题是:
execScript方法或在浏览器中使用javascript:protocol 执行JavaScript的方式有什么不同吗?Rob*_*b W 11
1.这三种方法是否在不同的环境中执行javascript代码?
所有这三种方法都在页面上下文中执行JavaScript代码.将这些方法相互比较时,可以说JavaScript代码在同一环境中执行.
内容脚本(Chrome/Opera/Firefox/Safari)在与网页隔离的环境中运行,因此从这个角度来看,环境确实不同.
BHO有点不同,因为与其他扩展平台不同,扩展的语言不是JavaScript,而是C++,C#,...... JavaScript代码不能直接访问BHO的本机代码(除非你自己实现这样的东西),所以环境肯定是"不同的".
2.对另一个人没有限制吗?
Bookmarklets是javascript:...URL,仅此而已.浏览器扩展可以直接执行跨源HTTP请求,访问持久的站点独立存储等.如果要在书签中获取类似功能,则需要使用外部Web服务.
Bookmarklets只有在用户手动激活时才能激活.这是优势还是劣势取决于您的情况.
书签小程序的最大大小受最大URL长度的限制,该长度相当小.可以通过<script src>在文档中插入标记来规避此限制.必须首先加载脚本,因此代码的执行会延迟.
Bookmarklets几乎可用于所有网络浏览器,包括手机和平板电脑上的浏览器(Chrome扩展程序只能用于桌面Chromium浏览器).
3.执行结果呈现给用户的方式或反映在浏览器中的方式有何不同?
在所有情况下,您都在当前页面的上下文中运行代码.从理论上讲,一个页面可以取代所有内置方法(例如Function.prototype.call,String.prototype.replace......),以及干扰或滥用脚本的功能.
可能值得注意的是:Crossrider和Kango扩展框架以类似于这三种方法的方式实现Internet Explorer的"内容脚本"功能.这意味着页面可以通过这样的方式精心设计,即它们检测使用这些框架编写的IE插件,拦截API声明并滥用它们的功能.
4."Javascript Injection"和"Bookmarklets"这两个术语之间是否有任何区别?虽然我相信Javascript Injection是一种效果而Bookmarklets是实现这一目标的一种方式,但BHO和Chrome扩展是另一种方式.
书签和"注入脚本"之间没有概念上的区别.这个答案的第2部分解释了一些实际的差异.
(通过"注入脚本",我假设您指的是这个方法, 我创造了一个术语来区分Chrome扩展中的脚本类型.Opera 12-和Safari都将此术语用于"内容脚本").
5.如果4中的假设是正确的,那么使用BHO的execScript方法或在浏览器中使用javascript:protocol执行javascript的方式有什么不同吗?
除了前面提到的差异,没有.
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |