我有一个使用reCAPTCHA的表单.出于某种原因,当用户使用不正确的重新捕获值提交此表单时,重新呈现页面时,重新捕获无法呈现.
看起来它发生的是重新捕获尝试注入"脚本"标记,偶尔(并且仅在某些浏览器,某些环境和某些情况下),它未能将"脚本"标记添加到DOM.
它发生如下:
1)表单中嵌入了一些嵌入式javascript,如下所示:
https://www.google.com/recaptcha/api/challenge?k=<our public key>
Run Code Online (Sandbox Code Playgroud)
2)该脚本正确执行并返回以下内容:
var RecaptchaState = {
site : <some value>,
challenge : <challenge key>,
is_incorrect : false,
programming_error : '',
error_message : '',
server : 'https://www.google.com/recaptcha/api/',
timeout : 18000
};
document.write('<scr'+'ipt type="text/javascript" s'+'rc="' + RecaptchaState.server + 'js/recaptcha.js"></scr'+'ipt>');
Run Code Online (Sandbox Code Playgroud)
3)之后通常会发生的事情是,脚本标记被注入页面,recaptcha.js被加载,它将读取RecaptchaState以调用recaptcha来获取要渲染的图像.
但是,在某些情况下,由于某种原因,应该在2)中添加的脚本标记似乎永远不会添加到DOM中,因此从不加载recaptcha.js,因此从不呈现recaptcha!在页面呈现后,我可以在控制台中看到"RecaptchaState"存在且具有正确的值,只是没有脚本标记.
所以这就是正在发生的事情,我真的很难过为什么.我只能在Firefox中重现这一点,奇怪的是,它只在某些条件下发生.例如,如果我通过fiddler路由请求,它每次都会工作,永远不会失败.如果我在提交请求之前清除缓存,它将每次都有效.有时,当我期待它失败时,它会起作用,反之亦然.所以这是非常零星的.
所以我的想法是,它可能与js加载的时间有关,这会干扰"document.write"语句.也许其他一些javascript正在干扰它或类似的东西.只是寻找一些关于如何尝试解决这个问题的一般性想法,我可以运行的测试,我可以寻找的东西,或任何真实的想法.
提前致谢
更新
仍然没有运气搞清楚这一点.有人以为我有......我们在firebug控制台中看不到任何错误消息,表明任何事情都会出错,尽管事情显而易见.我们可以使用任何实用程序来仔细查看Firefox中究竟发生了什么吗?我正在考虑像Chrome的"Speed-Tracer"这样的东西,它为您提供非常详细的活动时间表.这里唯一的问题是我们无法在Chrome中重现它.
我想使用用户脚本在站点中加载另一个脚本文件.但是,js.onload事件无法正常工作.
用户脚本文件:
// ==UserScript==
// @name Code highlight
// @description Test
// @include http://localhost/*
// @version 1.0
// ==/UserScript==
var js = document.createElement('script');
js.src = "http://localhost/test/js/load.js";
document.getElementsByTagName("head")[0].appendChild(js);
js.onload = function(){
console.log(A)
}
Run Code Online (Sandbox Code Playgroud)
load.js文件:
var A = {
name:'aa'
}
Run Code Online (Sandbox Code Playgroud)
在Chrome中,控制台输出"undefined",但load.js已完全加载.
我在Firefox中进行了测试,输出A正确.
在Yesod / Haskell中,我想调用addScriptRemote并将其添加<script>到头部。照原样,似乎只将脚本添加到主体部分。
我的网站上有一些外部脚本存在一些奇怪的问题.我终于把它归结为这个片段了.
<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js" onload="console.log('conversion')"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" onload="console.log('jquery')"></script>
Run Code Online (Sandbox Code Playgroud)
在firefox中加载这个只有第二个脚本加载,而使用chrome,都加载.这是在OSX上使用最新的浏览器.
现在,如果我将crossorigin属性添加到两个脚本,那么它将停止在chrome中使用此错误Script from origin 'http://www.googleadservices.com' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.example.com:3000' is therefore not allowed access.
现在的脚本是
<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js" onload="console.log('12123')" crossorigin async></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" onload="console.log('123')" async crossorigin></script>
Run Code Online (Sandbox Code Playgroud)
我对这种行为上的差异感到震惊.这是因为firefox比CHrome更严格吗?这是我设置的地方吗?或者这是Firefox/Chrome方面的错误?
另外,我应该与供应商讨论如何为CORS设置js?令我印象深刻的是谷歌失败了,但我还有另一个资源破裂.
通过权利,MDN声称script标签不受同一原产地政策的限制.
通常我们将JavaScript <script>标记放在HTML文档的底部,就在结束</body>标记之前,这样做的好处是它们在DOM中已经可用的所有元素之后执行,还有更多的东西.
但是,我使用的是框架文档 1,<frameset>而不是<body>标签.我不想把它们放在<head>文档中,因为它们不能立即访问3以下的DOM元素.而且我不想<iframe>在标准身体标签中使用s 4.我试过了
<head>
<title>Framesets are interesting</title>
</head>
<frameset cols="50%,50%">
<frame id="frame-a" src="a.html">
<frame id="frame-b" src="b.html">
<script type="text/javascript">
console.log("hello world!");
console.log(document.getElementById("frame-a")); // this is what I'm after
</script>
</frameset>
Run Code Online (Sandbox Code Playgroud)
但是,脚本根本没有执行,甚至没有出现在DOM检查器中.当然,一个<frameset>可能只包含<frame>和<noframes>标签.但是,在<frame>标签之后真的没有办法让脚本执行吗?
仅供参考,将它们放置在</frameset> 有时用<body>s 完成后也不起作用.
1:是的,我知道他们已被弃用了.它们只是我项目的自然选择2,一个简洁的并排视图,显示两个文档并以复杂的方式将它们滚动在一起.
2:......之前我从未使用过它们,所以我想尝试一下.
3:这就是我最终的结果,毕竟一个onload处理程序是微不足道的.问题仍然存在,我很好奇.
4:工作正常,但需要复杂的CSS样式
所以我有这个脚本标签
<script async="async" data-cfasync="false" src=""></script>
Run Code Online (Sandbox Code Playgroud)
我希望能够动态插入。我试过将它设置为一个变量,
let scriptTag = '<script async="async" data-cfasync="false" src=""></script>';
Run Code Online (Sandbox Code Playgroud)
并使用 innerHTML 将其添加到我的内容 div 中,但这似乎不起作用。我知道我这样做是非常错误的,我的一部分认为这可能是不可能的。
我想这样做的原因是为了测试目的,我可以打开和关闭广告,这样我在测试期间的观点就不会影响分析,这是我应该担心的事情还是可以忽略不计。我只知道我已经被禁止使用 chartboost,而没有打开和关闭广告的测试变量。
编辑:是的,这与其他问题类似,但这些问题没有使用“data-cfasync”等属性解决。Mandalina 和 supra28 把它钉在了头上。
Require-js通常在脚本标记上使用名为"data-main"的属性.有没有办法告诉Rails的javascript标签助手添加它,还是我应该以老式的方式做到这一点?
这是从的index.html在HTML5样板,只是前</body>标签:
<!-- JavaScript at the bottom for fast page loading: http://developer.yahoo.com/performance/rules.html#js_bottom -->
<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.7.2.min.js"><\/script>')</script>
<!-- scripts concatenated and minified via build script -->
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
<!-- end scripts -->
<!-- Asynchronous Google Analytics snippet. Change UA-XXXXX-X to be your site's ID.
mathiasbynens.be/notes/async-analytics-snippet -->
<script>
var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
s.parentNode.insertBefore(g,s)}(document,'script'));
</script> …Run Code Online (Sandbox Code Playgroud) 我正在做一个远程脚本-src
<script src="http://thirdparty.com/test.js"></script>
Run Code Online (Sandbox Code Playgroud)
我不想将我的http referer标头发送到thirdparty.com.我该怎么做?
我有一个 XML 文件,看起来像
<script>
<foo>bar</foo>
</script>
Run Code Online (Sandbox Code Playgroud)
这不是 HTML,并且该标记与HTML 脚本标记<script>无关。(与这个问题不同)
但是 IntelliJ(版本 2016.2)错误地显示有关 的子元素的第一个括号的未转义 XML 字符的警告<script>。IntelliJ 将 this 误认为 HTML 脚本标签?我怎样才能防止这种情况发生?
无论是否存在诸如 之类的标头,都会出现警告<?xml version="1.0" ?>。
script-tag ×10
javascript ×6
html ×5
cors ×1
dom ×1
firefox ×1
frames ×1
frameset ×1
haskell ×1
http-referer ×1
include ×1
optimization ×1
recaptcha ×1
ruby ×1
userscripts ×1
xml ×1
yesod ×1
yesod-forms ×1