当前位置: 首页 > 知识库问答 >
问题:

JavaScript注入和bookmarklet有什么区别吗?

翟光赫
2023-03-14

根据维基百科关于书签的文章(http://en . Wikipedia . org/wiki/Bookmarklet),书签的概念是:

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 + " })()");

类似地,在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);

这些有什么不同?我的高级问题是:

  1. 这三种方法是否在不同的环境中执行JavaScript代码
  2. 其中一个有没有其他人没有的限制
  3. 执行结果呈现给用户或反映回浏览器的方式有什么不同吗
  4. “JavaScript注入”和“书签”之间有什么区别吗?虽然我相信JavaScript注入是一种效果,书签是实现这一点的一种方式,但BHO和Chrome扩展是另一种方式
  5. 如果第4条中的假设是正确的,那么使用BHO的<code>execScript</code>方法或在浏览器中使用JavaScript:protocol执行JavaScript的方式有什么不同吗

共有1个答案

董子平
2023-03-14

1. 这三种方法是否在不同的环境中执行javascript代码?

这三个方法都在页面上下文中执行JavaScript代码。当这些方法相互比较时,可以说JavaScript代码是在相同的环境中执行的。

内容脚本(Chrome/Opera/Firefox/Safari)在与网页隔离的环境中运行,因此从这个角度来看,环境确实不同
BHO有点不同,因为与其他扩展平台不同,扩展的语言不是JavaScript,而是C、C#……JavaScript代码不能直接访问BHO的本地代码(除非您自己实现了这样的代码),所以环境肯定是“不同的”。

2.其中一个有没有另一个没有的限制?

Bookmarklets是< code>javascript:... URL,仅此而已。浏览器扩展可以直接执行跨源HTTP请求,访问持久的独立于站点的存储等。如果您想在bookmarklet中获得类似的特性,您需要使用外部web服务。

书签只有在用户手动激活时才能激活。这是优势还是劣势取决于你的情况。

书签的最大大小受最大URL长度的限制,该长度相当小。可以通过插入来规避此限制

书签可以在几乎所有的网络浏览器中使用,包括手机和平板电脑上的浏览器(Chrome扩展只能在桌面Chromium浏览器中使用)。

3.执行结果呈现给用户或在浏览器中反映回来的方式有什么不同吗?

不。在所有情况下,您都在当前页面的上下文中运行代码。理论上,页面可以替换所有内置方法(例如,Function.protype.callString.protype.replace等),并干扰或滥用脚本的功能
可能值得注意:Crossrider和Kango扩展框架以类似于这三种方法的方式实现了Internet Explorer的“内容脚本”功能。这意味着页面可以以这样的方式制作,即检测使用这些框架编写的IE插件,拦截API声明并滥用其功能。

4.术语“Javascript注入”和“书签”之间有什么区别吗?虽然我相信Javascript注入是一种效果,书签是实现这种效果的一种方式,但BHO和Chrome扩展是另一种方式。

bookmarklet和“注入脚本”在概念上没有区别。本答案第2节解释了一些实际差异。

(通过“注入脚本”,我假设您指的是我创造的这种方法来区分Chrome扩展程序中的脚本类型。Opera 12- 和 Safari 都使用这个术语来表示“内容脚本”)。

5.如果4中的假设是正确的,那么使用BHO的execScript方法或在浏览器中使用javascript:protocol执行javascript的方式有什么不同吗?

除了前面提到的差异,没有。

 类似资料:
  • 问题内容: 我一直想知道 为什么? 是JScript和JavaScript之间的区别。 问题答案: 真正的ECMAScript只是不同的名称。约翰·雷西格(JohnResig)有一个很好的解释。 以下是完整的版本明细: IE 6-7支持JScript 5(相当于ECMAScript 3,JavaScript 1.5) IE 8支持JScript 6(与ECMAScript 3,JavaScript

  • 问题内容: JavaScript和Java有什么区别? 问题答案: Java和Javascript相似,例如Car和Carpet相似。

  • 问题内容: ECMAScript和JavaScript有什么区别?根据我的推论,ECMAScript是标准,JavaScript是实现。它是否正确? 问题答案: 我认为有一点历史课是应该的。 JavaScript最初称为Mocha,后来更改为Livescript,但最终成为JavaScript。 请务必注意,JavaScript早于ECMAscript,历史记录会告诉您原因。 从一开始,JavaS

  • 本文向大家介绍jQuery和JavaScript有什么区别?,包括了jQuery和JavaScript有什么区别?的使用技巧和注意事项,需要的朋友参考一下 以下是jQuery和JavaScript之间的区别: jQuery的 jQuery是John Resig在2006年创建的快速简洁的JavaScript库。jQuery简化了HTML文档的遍历,事件处理,动画和Ajax交互,以实现快速Web开发

  • 问题内容: JavaScript中的&和&&有什么区别? 示例代码: 似乎&&是一个逻辑上的“和”,如果两个都为true,则总是为我提供第二个值。 但是什么是&? (顺便说一下,&&在Python中似乎是“ and”;&在Python中似乎是&。) 问题答案: 是按位AND 该运算符期望 两个数字 并重新调整一个 数字。 如果它们不是数字,则将其强制转换为数字。 注意: 在Javascript中,

  • 问题内容: 明智地设置格式,明智地使用文件类型以及明智地使用实用程序? 问题答案: JSONP是带填充的JSON,也就是说,您将字符串放在开头,并在其周围加上一对括号。例如: 结果是您可以将JSON作为脚本文件加载。如果您之前设置了一个名为的函数,那么在脚本文件加载完成后,将使用一个参数(即JSON数据)调用该函数。这通常用于允许带有JSON数据的跨站点AJAX。如果您知道example.com正