所以我遇到了 svelte 和 google Recaptcha API 的问题。
我的主要 HTML 文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width,initial-scale=1'>
<title>Svelte app</title>
<link rel='icon' type='image/png' href='/favicon.png'>
<link rel='stylesheet' href='/global.css'>
<link rel='stylesheet' href='/build/bundle.css'>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Bitter:400,700">
<link rel="stylesheet" href="/css/styles.min.css">
<script defer src='/build/bundle.js'></script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.3.1/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@9"></script>
</head>
<body>
</body>
</html>
我的 main.svelte
<script>
import swal from "sweetalert";
function verifyUser() {
swal({
title: "Please wait a minute!",
text: "Do not close or exit this tab, we are currently verifying you...",
icon: "info",
backdrop: `rgba(0,0,0,1)`,
showConfirmButton: false,
allowOutsideClick: false,
allowEscapeKey: false
});
}
</script>
<div>
<div class="header-dark">
<nav class="navbar navbar-dark navbar-expand-lg navigation-clean-search">
<div class="container">
<a class="navbar-brand" href="/">QSP Human Verification Module</a>
<button class="navbar-toggler" data-toggle="collapse">
<span class="sr-only">Toggle navigation</span>
<span class="navbar-toggler-icon" />
</button>
</div>
</nav>
<div class="container hero">
<div class="row">
<div class="col-md-8 offset-md-2">
<h1 class="text-center">
Please complete the Captcha challenge to continue to the server.
</h1>
<form action="" method="post">
<div
class="g-recaptcha"
data-sitekey="key"
data-callback={verifyUser}
/>
</form>
</div>
</div>
</div>
</div>
</div>
问题是该函数只是自身的字符串,不能仅使用"verifyUser" or
verifyUser() ReCAPTCHAreturns
无法找到用户提供的函数来执行:verifyUser`
using{verifyUser}
变成字符串(更多https://prnt.sc/qhyc2w)
像这样执行返回:
ReCAPTCHA couldn't find user-provided function: function verifyUser() {
swal({
title: "Please wait a minute!",
text: "Do not close or exit this tab, we are currently verifying you...",
icon: "info",
backdrop: `rgba(0,0,0,1)`,
showConfirmButton: false,
allowOutsideClick: false,
allowEscapeKey: false
});
}
汇总配置
import svelte from 'rollup-plugin-svelte';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser';
const production = !process.env.ROLLUP_WATCH;
export default {
input: 'src/main.js',
output: {
sourcemap: true,
format: 'iife',
name: 'app',
file: 'public/build/bundle.js'
},
plugins: [
svelte({
// enable run-time checks when not in production
dev: !production,
// we'll extract any component CSS out into
// a separate file — better for performance
css: css => {
css.write('public/build/bundle.css');
}
}),
// If you have external dependencies installed from
// npm, you'll most likely need these plugins. In
// some cases you'll need additional configuration —
// consult the documentation for details:
// https://github.com/rollup/plugins/tree/master/packages/commonjs
resolve({
browser: true,
dedupe: importee => importee === 'svelte' || importee.startsWith('svelte/')
}),
commonjs(),
// In dev mode, call `npm run start` once
// the bundle has been generated
!production && serve(),
// Watch the `public` directory and refresh the
// browser on changes when not in production
!production && livereload('public'),
// If we're building for production (npm run build
// instead of npm run dev), minify
production && terser()
],
watch: {
clearScreen: false
}
};
function serve() {
let started = false;
return {
writeBundle() {
if (!started) {
started = true;
require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
stdio: ['ignore', 'inherit', 'inherit'],
shell: true
});
}
}
};
}
任何如何正确传递函数?