diff --git a/public/survey.html b/public/survey.html
index 95528fc..87a76bc 100644
--- a/public/survey.html
+++ b/public/survey.html
@@ -2370,28 +2370,37 @@
generateBtn.querySelector('.button-text').textContent = '正在生成链接...';
generateBtn.disabled = true;
- // 调用后端API创建会话(和开始答题一样的逻辑)
- const response = await fetch('/api/create-session', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({
- name: studentName,
- school: studentSchool,
- grade: studentGrade,
- phone: studentPhone,
- selectedSubject: document.getElementById('subjectFilterSelect').value || '',
- selectedSemester: document.getElementById('gradeFilterSelect').value || '',
- selectedExamType: '',
- selectedUnit: document.getElementById('unitFilterSelect').value || '',
- selectedCategory: '',
- selectedQuestionType: '',
- selectedTag: this.selectedTag,
- selectedTagsList: [],
- questionsConfig: this.currentRules,
- scoreRange: scoreRange
- })
+ // iOS兼容性:使用setTimeout确保请求是用户直接触发的
+ const response = await new Promise((resolve, reject) => {
+ setTimeout(async () => {
+ try {
+ const fetchResponse = await fetch('/api/create-session', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ name: studentName,
+ school: studentSchool,
+ grade: studentGrade,
+ phone: studentPhone,
+ selectedSubject: document.getElementById('subjectFilterSelect').value || '',
+ selectedSemester: document.getElementById('gradeFilterSelect').value || '',
+ selectedExamType: '',
+ selectedUnit: document.getElementById('unitFilterSelect').value || '',
+ selectedCategory: '',
+ selectedQuestionType: '',
+ selectedTag: this.selectedTag,
+ selectedTagsList: [],
+ questionsConfig: this.currentRules,
+ scoreRange: scoreRange
+ })
+ });
+ resolve(fetchResponse);
+ } catch (error) {
+ reject(error);
+ }
+ }, 0);
});
if (!response.ok) {
@@ -2437,11 +2446,19 @@
} catch (error) {
console.error('生成测评链接失败:', error);
- this.showErrorDialog('生成测评链接失败',
- `创建测评链接时发生错误:
+ const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
+ const errorMessage = error.message.includes('not allowed') && isIOS
+ ? `iOS设备权限限制:请确保:
+ • 在Safari设置中允许网页访问网络
+ • 尝试在Safari中"重新加载页面"
+ • 检查是否启用了"限制网页跟踪"
+ • 如仍失败,请尝试使用其他浏览器(如Chrome)
+ 技术细节:${error.message}`
+ : `创建测评链接时发生错误:
错误信息:${error.message}
- 请检查网络连接或联系技术支持。`
- );
+ 请检查网络连接或联系技术支持。`;
+
+ this.showErrorDialog('生成测评链接失败', errorMessage);
} finally {
// 恢复按钮状态
const generateBtn = document.getElementById('generateLinkBtn');
@@ -2506,28 +2523,37 @@
startBtn.querySelector('.button-text').textContent = '正在创建答题会话...';
startBtn.disabled = true;
- // 调用后端API创建会话
- const response = await fetch('/api/create-session', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({
- name: studentName,
- school: studentSchool,
- grade: studentGrade,
- phone: studentPhone,
- selectedSubject: document.getElementById('subjectFilterSelect').value || '',
- selectedSemester: document.getElementById('gradeFilterSelect').value || '',
- selectedExamType: '',
- selectedUnit: document.getElementById('unitFilterSelect').value || '',
- selectedCategory: '',
- selectedQuestionType: '',
- selectedTag: this.selectedTag,
- selectedTagsList: [],
- questionsConfig: this.currentRules,
- scoreRange: scoreRange
- })
+ // iOS兼容性:使用setTimeout确保请求是用户直接触发的
+ const response = await new Promise((resolve, reject) => {
+ setTimeout(async () => {
+ try {
+ const fetchResponse = await fetch('/api/create-session', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ name: studentName,
+ school: studentSchool,
+ grade: studentGrade,
+ phone: studentPhone,
+ selectedSubject: document.getElementById('subjectFilterSelect').value || '',
+ selectedSemester: document.getElementById('gradeFilterSelect').value || '',
+ selectedExamType: '',
+ selectedUnit: document.getElementById('unitFilterSelect').value || '',
+ selectedCategory: '',
+ selectedQuestionType: '',
+ selectedTag: this.selectedTag,
+ selectedTagsList: [],
+ questionsConfig: this.currentRules,
+ scoreRange: scoreRange
+ })
+ });
+ resolve(fetchResponse);
+ } catch (error) {
+ reject(error);
+ }
+ }, 0);
});
if (!response.ok) {
@@ -2549,11 +2575,19 @@
} catch (error) {
console.error('开始答题失败:', error);
- this.showErrorDialog('开始答题失败',
- `创建答题会话时发生错误:
+ const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent);
+ const errorMessage = error.message.includes('not allowed') && isIOS
+ ? `iOS设备权限限制:请确保:
+ • 在Safari设置中允许网页访问网络
+ • 尝试在Safari中"重新加载页面"
+ • 检查是否启用了"限制网页跟踪"
+ • 如仍失败,请尝试使用其他浏览器(如Chrome)
+ 技术细节:${error.message}`
+ : `创建答题会话时发生错误:
错误信息:${error.message}
- 请检查网络连接或联系技术支持。`
- );
+ 请检查网络连接或联系技术支持。`;
+
+ this.showErrorDialog('开始答题失败', errorMessage);
// 恢复按钮状态
const startBtn = document.getElementById('startSurvey');