Load reCaptcha script once in Backbone view
I want to dynamically load Google's reCaptcha on my Backbone View only when on that view and only add the script once.
I managed to find this really helpful answer here: https://stackoverflow.com/a/34533362/3847393 which adds the script to the view when I render the view. However, every time I navigate away from this view and back to it, it adds the script to the header again. As the reCaptcha is on a lot of pages on my site, this could quickly add a lot of repeated scripts to the code head.
I have tried to check and see if the script has already been added to the DOM first before adding the script, which works. However, when navigating away from the page and back again, the reCaptcha doesn't render.
loadCaptcha: function loadCaptcha(siteKey)
var self = this;
window.renderCaptcha = function()
self.captchaWidgetId = grecaptcha.render('contactus-form-recaptcha',
sitekey: siteKey
);
;
var scripts = $('#recaptcha-api-script');
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
I also tried updating my scripts length check at the end and adding an else to try re-rendering the reCaptcha:
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
else
window.renderCaptcha();
But this throws an reCaptcha error saying that the placeholder element/id is missing.
Much appreciate any help or direction.
javascript backbone.js recaptcha
add a comment |
I want to dynamically load Google's reCaptcha on my Backbone View only when on that view and only add the script once.
I managed to find this really helpful answer here: https://stackoverflow.com/a/34533362/3847393 which adds the script to the view when I render the view. However, every time I navigate away from this view and back to it, it adds the script to the header again. As the reCaptcha is on a lot of pages on my site, this could quickly add a lot of repeated scripts to the code head.
I have tried to check and see if the script has already been added to the DOM first before adding the script, which works. However, when navigating away from the page and back again, the reCaptcha doesn't render.
loadCaptcha: function loadCaptcha(siteKey)
var self = this;
window.renderCaptcha = function()
self.captchaWidgetId = grecaptcha.render('contactus-form-recaptcha',
sitekey: siteKey
);
;
var scripts = $('#recaptcha-api-script');
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
I also tried updating my scripts length check at the end and adding an else to try re-rendering the reCaptcha:
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
else
window.renderCaptcha();
But this throws an reCaptcha error saying that the placeholder element/id is missing.
Much appreciate any help or direction.
javascript backbone.js recaptcha
add a comment |
I want to dynamically load Google's reCaptcha on my Backbone View only when on that view and only add the script once.
I managed to find this really helpful answer here: https://stackoverflow.com/a/34533362/3847393 which adds the script to the view when I render the view. However, every time I navigate away from this view and back to it, it adds the script to the header again. As the reCaptcha is on a lot of pages on my site, this could quickly add a lot of repeated scripts to the code head.
I have tried to check and see if the script has already been added to the DOM first before adding the script, which works. However, when navigating away from the page and back again, the reCaptcha doesn't render.
loadCaptcha: function loadCaptcha(siteKey)
var self = this;
window.renderCaptcha = function()
self.captchaWidgetId = grecaptcha.render('contactus-form-recaptcha',
sitekey: siteKey
);
;
var scripts = $('#recaptcha-api-script');
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
I also tried updating my scripts length check at the end and adding an else to try re-rendering the reCaptcha:
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
else
window.renderCaptcha();
But this throws an reCaptcha error saying that the placeholder element/id is missing.
Much appreciate any help or direction.
javascript backbone.js recaptcha
I want to dynamically load Google's reCaptcha on my Backbone View only when on that view and only add the script once.
I managed to find this really helpful answer here: https://stackoverflow.com/a/34533362/3847393 which adds the script to the view when I render the view. However, every time I navigate away from this view and back to it, it adds the script to the header again. As the reCaptcha is on a lot of pages on my site, this could quickly add a lot of repeated scripts to the code head.
I have tried to check and see if the script has already been added to the DOM first before adding the script, which works. However, when navigating away from the page and back again, the reCaptcha doesn't render.
loadCaptcha: function loadCaptcha(siteKey)
var self = this;
window.renderCaptcha = function()
self.captchaWidgetId = grecaptcha.render('contactus-form-recaptcha',
sitekey: siteKey
);
;
var scripts = $('#recaptcha-api-script');
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
I also tried updating my scripts length check at the end and adding an else to try re-rendering the reCaptcha:
if (!scripts.length)
$('head:first').append('<script id="recaptcha-api-script" type="text/javascript" src="https://www.google.com/recaptcha/api.js?onload=renderCaptcha&render=explicit"></script>');
else
window.renderCaptcha();
But this throws an reCaptcha error saying that the placeholder element/id is missing.
Much appreciate any help or direction.
javascript backbone.js recaptcha
javascript backbone.js recaptcha
asked Nov 16 '18 at 1:33
RandomHarlzRandomHarlz
33
33
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330222%2fload-recaptcha-script-once-in-backbone-view%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330222%2fload-recaptcha-script-once-in-backbone-view%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown