在其他地方关于 SO 的讨论中,我被告知“[m]ost 浏览器将不会执行内联 javascript……这些天。”这对我来说是个新闻,我一直在研究以验证这一说法,以便了解我是否需要调整我维护的某些网站上的代码以使其与 future 的浏览器兼容。
据我所知,评论者指的是 Content Security Policy ,一个相对较新的提案,如果实现,它将限制或完全禁用内联脚本。
但是,我注意到:
这requires the use of a (currently optional) HTTP header or meta-tag equivalent ,我怀疑任何网络服务器都无法默认发送。
browser support因为它目前仅限于最新和最好的,尤其是在移动设备上。
这没有任何迹象表明(对我来说)“大多数浏览器”根本不会提供内联 JavaScript,也没有表示他们计划在未来实现这样的事情。 p>
我的问题基本上是,#3 我错了吗?内联 JavaScript 支持可能会被淘汰吗?
顺便说一下,我在 SO 上提出这个问题,因为我认为这可能是“软件开发独有的实际的、可回答的问题”。如果其他人认为这太宽泛或属于 SE 的其他地方,我想听听您的建议。提前致谢!
最佳答案
如果默认情况下禁用内联 javascript,则有数以亿计的网页将停止工作。这样做的浏览器必须非常勇敢。
浏览器的向后兼容性是好事也是坏事(想想 IE!)。这是一件坏事,因为如果它们不必支持遗留代码,它们可以更轻便、更快,也是一件好事,因为否则,数以亿计不再有人维护的有用网页将几乎丢失。
认为没有浏览器,即使使用 HTML5,也会对 HTML 执行严格的规则,所以我怀疑内联 javascript 会被禁用。即使引入了一种方法,作为开发人员,您也可以禁用该选项(或者更好的是,不启用它)。
也就是说,我会是第一个在我自己的网站上启用它的人,因为我讨厌内联代码。我的建议:除非绝对必要,否则永远不要使用它。
关于javascript - 我应该完全停止使用内联 JavaScript 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22359108/
我有一个目前看起来像这样的字符串模板:varoption="\u00A0"+"\u00A0"+"\u00A0"+"\u00A0"+option.name;我正在尝试更改为新的ES6语法varoption=`${option.name}`但是当它出现在屏幕上时,ES6版本中没有任何空格,或者在我指定它的字符串上没有4个空格缩进。该问题可能与我在select中将这些字符串用作options有关。有什么想法吗? 最佳答案 在第一个示例中,您使用了不间断空格(\u00A0),在
可能是一个非常基本的问题,但我似乎找不到简单的答案。我有一个利用Angular的$http的GET方法,它请求来自特定url(URL_OF_INTEREST)的promise。在此服务器上,我运行了一个可以处理GET请求的快速脚本server.js脚本。server.jsvarexpress=require('express');//callexpressvarapp=express();//defineourappusingexpressvarbodyParser=require('body-parser');varstripe=require(
伙计们,我知道使用npminstall-g我们可以全局安装节点模块/包,但我不确定选项--save和--保存开发我用谷歌搜索了一下,但还是不太清楚。请分享您的想法。 最佳答案 --save将第三方包添加到包的依赖项。每当有人运行npminstallyourPackage时,它将与包一起安装。--save-dev将第三方包添加到包的开发依赖项。当有人安装你的包时,它不会被安装。它通常只有在有人克隆您的源存储库并在其中运行npminstall时才会安装。Devdependencies,顾名思义,就是那些只在开发包时需要的依赖。这可以包括
我有一个基本的JSFiddle,我想在圆圈内绘制随机点。但是我不知道如何限制点在圆内。这是我目前拥有的:varctx=canvas.getContext('2d'),count=1000,//numberofrandompointscx=150,cy=150,radius=148;ctx.beginPath();ctx.moveTo(cx,cy);ctx.arc(canvas.width/2,canvas.height/2,radius,0,2*Math.PI);ctx.closePath();ctx.fillStyle='#00000';ctx.fil
正如我已经了解到的(此处:https://www.youtube.com/watch?v=8aGhZQkoFbQ),在某些情况下调用具有0毫秒延迟的setTimeout(由于事件循环)可能很有用。现在通常每当我使用setTimeout时,我也会注意在适当的位置调用clearTimeout以确保没有任何东西留在某处并在我没有的地方执行想要它被执行。所以我的问题是:是否有必要(是否有意义)在setTimeout之后调用clearTimeout0ms?传递的函数会立即附加到回调队列,因此我假设clearTimeout不会(也不能)做任何事情。或者clearTimeout甚至可以从回调队列中删
我有一个ReactNative应用程序,它可以在打开Chrome调试器的情况下正常运行。但是,一旦我禁用它,每当我尝试进行任何Parse调用时,我都会收到以下错误:调用堆栈返回以下尝试登录用户的代码:Parse.User.logIn(email,password,{success:function(res){console.log('success');},error:function(error){console.log(error.code+''+error.message);}});我已经尝试删除控制台语句,以防错误与控制台不可用有关,但无济于事。
我正在使用WOW.js和animate.css,现在我正在将CSS运行到Infinite。我想知道如何让我的类运行3秒停止并重新开始无限?我的html:<imgsrc="images/fork.png"class="forkwowrubberBand">我的CSS类:.fork{position:absolute;top:38%;left:81%;max-width:110px;-webkit-animation-iteration-count:infinite;-webkit-animation-delay:5s;}解决方案可以在JS或CS
我有一个json数组:[{"id":19,"name":"Jed","lastname":"DIAZ","hobby":"photo","birthday":"2011/11/22"},{"id":20,"name":"Judith","lastname":"HENDERSON","hobby":"pets","birthda
我通常是Passport身份验证的新手,我正在尝试创建一个简单的Express应用程序以使用github策略passport-github.对于google和twitter策略,我使用下面基本上相同的代码取得了成功,但每次我尝试合并github策略时,每当我点击回调路由时,我都会收到500响应并出现此错误:无法设置未定义的属性“用户”TypeError:Cannotsetproperty'user'ofundefinedat/Users/dan/Repos/passport-github-portal/node_modules/passport-github/node_
我有一个关键字列表,然后是页面上包含这些关键字的句子列表。我想让关键字列表可点击。当用户点击一个关键字时,该关键字的所有匹配项都会在句子中突出显示。如何使用jQuery或原始Javascript执行此操作?我能想到的唯一方法是用一个包含自身作为类名的类来包装页面上的每个单词。然后制作关键字按钮,为匹配的词类添加高亮类。这可能有效,但似乎有很多不必要的代码注入(inject)。关键字列表<button>this</button><button>example</button>句子<spanclass='word_this
我有一个目前看起来像这样的字符串模板:varoption="\u00A0"+"\u00A0"+"\u00A0"+"\u00A0"+option.name;我正在尝试更改为新的ES6语法varoption=`${option.name}`但是当它出现在屏幕上时,ES6版本中没有任何空格,或者在我指定它的字符串上没有4个空格缩进。该问题可能与我在select中将这些字符串用作options有关。有什么想法吗? 最佳答案 在第一个示例中,您使用了不间断空格(\u00A0),在
可能是一个非常基本的问题,但我似乎找不到简单的答案。我有一个利用Angular的$http的GET方法,它请求来自特定url(URL_OF_INTEREST)的promise。在此服务器上,我运行了一个可以处理GET请求的快速脚本server.js脚本。server.jsvarexpress=require('express');//callexpressvarapp=express();//defineourappusingexpressvarbodyParser=require('body-parser');varstripe=require(
伙计们,我知道使用npminstall-g我们可以全局安装节点模块/包,但我不确定选项--save和--保存开发我用谷歌搜索了一下,但还是不太清楚。请分享您的想法。 最佳答案 --save将第三方包添加到包的依赖项。每当有人运行npminstallyourPackage时,它将与包一起安装。--save-dev将第三方包添加到包的开发依赖项。当有人安装你的包时,它不会被安装。它通常只有在有人克隆您的源存储库并在其中运行npminstall时才会安装。Devdependencies,顾名思义,就是那些只在开发包时需要的依赖。这可以包括
我有一个基本的JSFiddle,我想在圆圈内绘制随机点。但是我不知道如何限制点在圆内。这是我目前拥有的:varctx=canvas.getContext('2d'),count=1000,//numberofrandompointscx=150,cy=150,radius=148;ctx.beginPath();ctx.moveTo(cx,cy);ctx.arc(canvas.width/2,canvas.height/2,radius,0,2*Math.PI);ctx.closePath();ctx.fillStyle='#00000';ctx.fil
正如我已经了解到的(此处:https://www.youtube.com/watch?v=8aGhZQkoFbQ),在某些情况下调用具有0毫秒延迟的setTimeout(由于事件循环)可能很有用。现在通常每当我使用setTimeout时,我也会注意在适当的位置调用clearTimeout以确保没有任何东西留在某处并在我没有的地方执行想要它被执行。所以我的问题是:是否有必要(是否有意义)在setTimeout之后调用clearTimeout0ms?传递的函数会立即附加到回调队列,因此我假设clearTimeout不会(也不能)做任何事情。或者clearTimeout甚至可以从回调队列中删
我有一个ReactNative应用程序,它可以在打开Chrome调试器的情况下正常运行。但是,一旦我禁用它,每当我尝试进行任何Parse调用时,我都会收到以下错误:调用堆栈返回以下尝试登录用户的代码:Parse.User.logIn(email,password,{success:function(res){console.log('success');},error:function(error){console.log(error.code+''+error.message);}});我已经尝试删除控制台语句,以防错误与控制台不可用有关,但无济于事。
我正在使用WOW.js和animate.css,现在我正在将CSS运行到Infinite。我想知道如何让我的类运行3秒停止并重新开始无限?我的html:<imgsrc="images/fork.png"class="forkwowrubberBand">我的CSS类:.fork{position:absolute;top:38%;left:81%;max-width:110px;-webkit-animation-iteration-count:infinite;-webkit-animation-delay:5s;}解决方案可以在JS或CS
我有一个json数组:[{"id":19,"name":"Jed","lastname":"DIAZ","hobby":"photo","birthday":"2011/11/22"},{"id":20,"name":"Judith","lastname":"HENDERSON","hobby":"pets","birthda
我通常是Passport身份验证的新手,我正在尝试创建一个简单的Express应用程序以使用github策略passport-github.对于google和twitter策略,我使用下面基本上相同的代码取得了成功,但每次我尝试合并github策略时,每当我点击回调路由时,我都会收到500响应并出现此错误:无法设置未定义的属性“用户”TypeError:Cannotsetproperty'user'ofundefinedat/Users/dan/Repos/passport-github-portal/node_modules/passport-github/node_
我有一个关键字列表,然后是页面上包含这些关键字的句子列表。我想让关键字列表可点击。当用户点击一个关键字时,该关键字的所有匹配项都会在句子中突出显示。如何使用jQuery或原始Javascript执行此操作?我能想到的唯一方法是用一个包含自身作为类名的类来包装页面上的每个单词。然后制作关键字按钮,为匹配的词类添加高亮类。这可能有效,但似乎有很多不必要的代码注入(inject)。关键字列表<button>this</button><button>example</button>句子<spanclass='word_this