Skip to content

safari+tampermonkey 会有兼容性问题 #20

Description

@bcdi

譬如uploadTo111666Best函数
替换成如下,则OK

async function uploadTo111666Best(file) {
  const tokens = [...HOST_111666_TOKENS]
  for (let i = tokens.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1))
    ;[tokens[i], tokens[j]] = [tokens[j], tokens[i]]
  }

  let lastError
  for (const token of tokens) {
    const formData = new FormData()
    formData.append('payload', file)

    try {
      // 优先尝试原生 fetch(携带当前网页的完整凭证与 Header)
      const resp = await fetch('https://i.111666.best/image', {
        method: 'POST',
        headers: {
          'auth-token': token,
        },
        body: formData,
      })

      const data = await resp.json()

      if (data?.ok && data?.src) {
        const src = String(data.src)
        return /^https?:\/\//i.test(src)
          ? src
          : 'https://i.111666.best' + src
      }

      console.warn('[111666 Retrying]', data)
      lastError = new Error(t('error_upload_failed'))
    } catch (error) {
      // 如果 fetch 因 CORS 失败,再降级回 gmRequest
      try {
        const data = await gmRequest({
          method: 'POST',
          url: 'https://i.111666.best/image',
          headers: { 'auth-token': token },
          data: formData,
          responseType: 'json',
        })
        if (data?.ok && data?.src) {
          const src = String(data.src)
          return /^https?:\/\//i.test(src) ? src : 'https://i.111666.best' + src
        }
      } catch (e) {
        lastError = e
      }
    }
  }
  throw lastError || new Error(t('error_upload_failed'))
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions