`
robinqu
  • 浏览: 90405 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JavaScript 在浏览器中的相关概念:执行环境、引入脚本、安全策略等

阅读更多
The Window as Global Execution Context
窗口作为全局执行环境

引用
document property for the Document object
two self-referential properties, window and self

a location property that refers to the Location object associated with the window. When a web browser displays a framed document

the frames[] array of the top-level Window object contains references to the Window objects that represent the frames

The Window object represents a web browser window (or a frame within a window; in client-side JavaScript, top-level windows and frames are essentially equivalent).


document属性引用Document对象

location属性引用与该window相关的Location对象

frames[]数组保存了文档中表单元素的引用

The Client-Side Object Hierarchy and the DOM
DOM文档树




The Role of JavaScript on the Web
JS在浏览器中的角色

引用
Web browsers display HTML-structured text styled with CSS stylesheets. HTML defines the content, and CSS supplies the presentation. Properly used, JavaScript adds behavior to the content and its presentation. The user's experience should not be dependent on JavaScript, but JavaScript can serve to facilitate that experience.


为内容和表现进一步添加行为

Unobtrusive JavaScript
不唐突的JS

引用

As its name implies, this paradigm holds that JavaScript should not draw attention to itself; it should not obtrude.

The first goal of unobtrusive JavaScript is to keep JavaScript code separate from HTML markup.  As a corollary to this goal, you should strive to make your external files of JavaScript code as modular as possible.

The second goal of unobtrusive JavaScript is that it must degrade gracefully.

A third goal of unobtrusive JavaScript is that it must not degrade the accessibility of an HTML page (and ideally it should enhance accessibility).


尽量不凸显JS的存在

首先,与HTML代码分离
其次,平稳退化
再次,增强可用性;也就是稳步增强

Embedding Scripts in HTML
在HTML中嵌入代码
引用
Between a pair of <script> and </script> tags
From an external file specified by the src attribute of a <script> tag
In an event handler, specified as the value of an HTML attribute such as onclick or onmouseover
In a URL that uses the special javascript: protocol


<script>标签之间
<scirpt>引入的单独JS文件
HTML的事件属性中的代码
javascirpt伪协议所引用的代码


注意CDATA标记
<script><![CDATA[// Your JavaScript code goes here
]]></script>


The defer Attribute
defer属性

引用
As mentioned earlier, a script may call the document.write( ) method to dynamically add content to a document. Because of this, when the HTML parser encounters a script, it must normally stop parsing the document and wait for the script to execute.



改变<script>代码块的执行顺序
可以延迟该块的执行,继续HTML解析

Event Handlers in HTML
事件句柄
引用

onclick
This handler is supported by all button-like form elements, as well as <a> and <area> tags.

onmousedown, onmouseup
These two event handlers are a lot like onclick, but they are triggered separately when the user presses and releases a mouse button, respectively. Most document elements support these handlers.

onmouseover, onmouseout

onchange
This event handler is supported by the <input>, <select>, and <textarea> elements. It is triggered when the user changes the value displayed by the element and then tabs or otherwise moves focus out of the element.

onload
This event handler may appear on the <body> tag and is triggered when the document and its external content (such as images) are fully loaded.


在执行js伪协议的语句是,确保返回值为空,否则会刷新当前页面来显示

The onload Event Handler
onload事件句柄

这个是在文档完全解析完并且所有资源都下载后执行的,这里不再允许执行document.write()。很显然这里文档已经渲染完毕,如果再有document.write(),那么浏览器就会新建一个空白文档来写入内容。用户就没有机会看到之前文档的内容了。

Client-Side Compatibility
客户端兼容性

目前保证兼容性最好的方法不是判断浏览器再为他们编写各自的代码,而是进行功能性判断。

Feature Testing
功能测试
引用

Feature testing (sometimes called capability testing) is a powerful technique for coping with incompatibilities.

简单来说也就是判断某一个函数或方法在特定的环境下是否存在,并根据结果进行对应操作。而不是盲目地根据不可靠的方法判断浏览器种类和版本。

例如下面对事件模型的判断:

if (element.addEventListener) { // Test for this W3C method before using it
    element.addEventListener("keydown", handler, false);
    element.addEventListener("keypress", handler, false);
}
else if (element.attachEvent) { // Test for this IE method before using it
    element.attachEvent("onkeydown", handler);
    element.attachEvent("onkeypress", handler);
}
else {  // Otherwise, fall back on a universally supported technique
    element.onkeydown = element.onkeypress = handler;
}


还有一种方法就是尝试所有可能的函数,直到有一种得出了正确的结果;往往这个是由于不同浏览器实现同一种操作的函数名称不一样。

例如下面这个新建XHR对象的例子:

// This is a list of XMLHttpRequest creation functions to try
HTTP._factories = [
    function( ) { return new XMLHttpRequest( ); },
    function( ) { return new ActiveXObject("Msxml2.XMLHTTP"); },
    function( ) { return new ActiveXObject("Microsoft.XMLHTTP"); }
];

// When we find a factory that works, store it here
HTTP._factory = null;

// Create and return a new XMLHttpRequest object.
//
// The first time we're called, try the list of factory functions until
// we find one that returns a nonnull value and does not throw an
// exception. Once we find a working factory, remember it for later use.
HTTP.newRequest = function( ) { /* fuction body omitted */ }



JavaScript Security
JS的安全策略

引用
A JavaScript program can open new browser windows, but, to prevent pop-up abuse by advertisers, many browsers restrict this feature so that it can happen only in response to a user-initiated event such as a mouse click.

A JavaScript program can close browser windows that it opened itself, but it is not allowed to close other windows without user confirmation. This prevents malicious scripts from calling self.close( ) to close the user's browsing window, thereby causing the program to exit.

A JavaScript program cannot obscure the destination of a link by setting the status line text when the mouse moves over the link.

A script cannot open a window that is too small (typically smaller than 100 pixels on a side) or shrink a window too small.

The value property of HTML FileUpload elements cannot be set.

A script cannot read the content of documents loaded from different servers than the document that contains the script. Similarly, a script cannot register event listeners on documents from different servers.


JS可以打开浏览器窗口,但是大多数浏览器都会限制这个功能。由于广告代码的干扰,浏览器通常只让用户点击行为中的打开窗口代码生效。

JS也不允许未经用户允许关闭浏览器窗口。

JS也不允许在鼠标滑过链接的时候通过改变状态栏的提示文字来混淆浏览者。大多数浏览器都禁止更改状态栏文本了。

JS也不允许把窗口调节至某一个边长小于100像素。

FileUpload组件的value值不能够被更改。

对于不同服务器上的页面,脚本既不能读取其内容,也不能注册事件。

The Same-Origin Policy
同源策略

引用
Specifically, a script can read only the properties of windows and documents that have the same origin as the document that contains the script

To support large web sites of this sort, you can use the domain property of the Document object. By default, the domain property contains the hostname of the server from which the document was loaded. You can set this property, but only to a string that is a valid domain suffix of itself.


这个可以看做是上面最后一条的详细解释。
尽管脚本会限制不同服务器的文档,但是现在的大型站点往往有许多子域名。在JS的安全特性限制下,这些子域名下的脚本也是无法通讯的。好在有一个document.domain属性。

将需要互相通讯的文档的document.domain设置为同一个顶级域名就可以突破这个限制。

例如:
img.aaa.com的页面中document.domain设置为aaa.com;
serach.aaa.com的页面中document.domain同样设置为aaa.com;
  • 大小: 73.8 KB
分享到:
评论

相关推荐

    JavaScript Chrome浏览器获取本地图片的属性

    在JavaScript的世界里,获取本地资源通常受到浏览器安全策略的限制,特别是涉及到文件系统直接访问时。针对"JavaScript Chrome浏览器获取本地图片的属性"这一主题,我们来深入探讨如何在Chrome浏览器中有效地处理...

    Node.js-deThread一个应用程序库支持在浏览器中利用JavaScript进行分布式计算

    deThread 库旨在将这一概念引入浏览器环境,使用户能在不离开浏览器的情况下利用多核处理器的优势。 **2. JavaScript 与 Web Workers** JavaScript 通常是单线程的,这意味着同一时间只能执行一个任务,这限制了其...

    跨站脚本攻击-安全教程(en).PDF

    这种攻击使得攻击者能够在受害者的浏览器中执行恶意脚本,从而窃取敏感数据、冒充受害者身份进行操作或者对受害者实施其他形式的安全威胁。 #### 重要概念解析 1. **XSS攻击类型**: - **存储型XSS**:攻击代码被...

    Javascript运行exe程序.

    然而,由于浏览器的安全限制,JavaScript在浏览器环境中是不能直接执行本地的EXE(可执行)程序的。这是因为允许这样的操作会带来严重的安全风险,比如恶意代码的执行。但是,通过一些变通方法,如Node.js环境或者...

    JavaScript 全面解析各种浏览器网页中的JS 执行顺序

    总的来说,尽管 JavaScript 的执行顺序在现代浏览器中通常是可预测的,但在进行跨浏览器兼容性测试时,开发者仍需要仔细检查代码的执行情况,确保不同浏览器环境下功能的正确性和稳定性。在处理动态引入脚本的场景时...

    electronquick实现在一个Electron窗口中快速加一个脚本

    在生产环境中,考虑使用更安全的执行策略,如`vm`模块或编译模板字符串。 8. **标签“JavaScript开发-其它杂项”**:这个标签可能表明讨论的内容不仅仅是Electron特定的,还可能涉及到JavaScript开发中的其他通用...

    [JavaScript进阶]Professional JavaScript for Web Developers(3rd)

    18. JavaScript中的XML(Chapter 18: XML in JavaScript):分析了在JavaScript中处理XML的方法,包括DOM解析器的使用等。 19. ECMAScript for XML(Chapter 19: ECMAScript for XML):可能描述了E4X规范在...

    xbro-messaging:跨浏览器内容脚本到浏览器扩展(附加组件)的后台脚本通信

    xbro-messaging 提供了一种安全的机制,确保了两个脚本间的通信不会泄露敏感信息,同时也遵循了浏览器的安全策略。 2. **异步支持**:在Web开发中,异步处理是非常重要的,尤其是在处理大量数据或执行耗时操作时。...

    白帽子讲浏览器安全.钱文祥(带详细书签).pdf

    2 浏览器中常见的安全概念 13 2.1 URL 13 2.1.1 URL的标准形式 15 2.1.2 IRI 16 2.1.3 URL的“可视化”问题——字形欺骗钓鱼攻击 18 2.1.4 国际化域名字形欺骗攻击 19 2.1.5 自纠错与Unicode字符分解映射 20 ...

    经允许的javasrcipt脚本

    在JavaScript的世界里,"经允许的javascript脚本"通常指的是那些在浏览器或服务器环境中被安全地执行,并且符合规定的代码。这些脚本是网站功能、交互性和动态内容的关键驱动力,但同时也需要遵循一系列的安全规范以...

    webview_浏览器_qt浏览器_QT_WebView_

    6. **安全与隐私**:QtWebEngine提供了一些设置来管理安全策略,如禁用特定的Web特性,防止跨站脚本攻击等。 7. **性能优化**:根据应用需求,可能需要配置`QWebEngineSettings`以优化性能,例如禁用图片加载、调整...

    开发浏览器

    3. **多平台支持**:浏览器需要在 Windows、MacOS、Linux、Android 和 iOS 等多种操作系统上运行,因此开发过程中需要考虑跨平台兼容性问题。 4. **安全性**:浏览器安全是至关重要的,包括防止跨站脚本攻击(XSS)...

    日历控件(浏览器兼容)

    在描述中提到的"parent 问题"可能指的是JavaScript中的跨域问题,因为Google浏览器对于同源策略执行得较为严格。同源策略是浏览器安全机制的一部分,阻止了不同源的页面之间共享数据,例如,当一个iframe尝试访问其...

    java 编写的一个 网页浏览器 ,不错

    5. JavaScript执行环境:现代网页通常包含JavaScript代码,因此Java编写的浏览器需要一个JavaScript引擎来执行这些脚本。开源项目如Rhino或Nashorn(在Java 8中引入)提供了这样的功能。开发者需要理解JavaScript的...

    Professional.JavaScript.for.Web.Developers.3rd.Edition

    8. **跨域通信与安全**:CORS(跨源资源共享)和JSONP等机制用于解决JavaScript的同源策略限制,同时,了解XSS(跨站脚本攻击)和CSRF(跨站请求伪造)等安全问题的防范方法也是必要的。 9. **移动与响应式开发**:...

    CSP:内容安全策略详解.zip

    **内容安全策略(Content Security Policy, CSP)**是现代Web应用程序中一种重要的安全特性,用于防御跨站脚本(XSS)攻击和其他恶意代码注入。它允许网站管理员通过定义一个策略来控制页面可以加载哪些资源,如脚本...

    js控制js控制权限控制js控制js控制权限控制

    虽然JavaScript在浏览器环境中对本地文件的操作受到严格限制,但在Node.js环境下,可以使用fs模块读写文件,这时就需要相应的权限控制来确保安全。 9. **SQL数据库交互**: 压缩包中的"xyw.sql"可能代表一个SQL...

    ajaxslt脚本库 google ajaxslt

    Ajaxslt是一种JavaScript库,专门设计用于在客户端浏览器环境中执行XML到XML的转换,即XSLT(可扩展样式表语言转换)。在许多情况下,特别是那些涉及动态数据交互和页面局部刷新的应用中,Ajaxslt扮演着关键角色。它...

    fishball自动抢鱼丸脚本

    【JavaScript开发-其它杂项】中的“fishball自动抢鱼丸脚本”是一个利用JavaScript编写的自动化工具,主要用于在线互动活动中自动参与抢鱼丸(或类似虚拟物品)的活动。在互联网直播、线上游戏或者社交媒体平台中,...

Global site tag (gtag.js) - Google Analytics