Spaces:
Running
O erro que você está vendo:
Browse filesmarkdown
Copy
about:srcdoc:10 Uncaught SyntaxError: Unexpected token ','
é um erro de sintaxe JavaScript, especificamente dizendo que há uma vírgula inesperada no código. Esse tipo de erro geralmente ocorre por:
Uma vírgula solta no final de um objeto ou array (em contextos onde não é permitida),
Problemas com template strings,
Erros de digitação ou formatação.
🔍 Análise do seu código
Você colou o mesmo erro várias vezes:
"about:srcdoc:10 Uncaught SyntaxError: Unexpected token ','Understand this error..."
Isso pode indicar que o erro está sendo gerado dentro de uma string ou que o código está sendo injetado de forma incorreta (por exemplo, via srcdoc de um iframe, ou como string em eval()).
Mas o código que você colou parece correto em termos de sintaxe. Então vamos procurar o problema.
✅ Possível causa do erro
O erro aponta para a linha10 do about:srcdoc. Isso geralmente acontece quando o script é injetado como conteúdo de um iframe com srcdoc, ou está sendo passado como string para algo como:
```jsiframe.srcdoc = <script>${seuScript}</script>;
markdown
Copy
Se o seu script for **convertido para string e injetado assim**, então **qualquer template string com crases (`) e quebras de linha pode quebrar a injeção**, especialmente se houver **vírgulas soltas ou caracteres mal escapados**.
---
### ❌ Onde pode estar o problemaVamos olhar este trecho do seu código (dentro do `panel.innerHTML`):
```js${isQwen ? ` <button id="send-to-zai" style="width:100%; background: #8b5cf6; color: white; border: none; padding:10px; border-radius:6px; cursor: pointer; font-weight:500; font-size:13px;">
➡️ Enviar para ZAI </button>` : ''}
➡️ Problema potencial:Se esse código for injetado como string (ex: dentro de srcdoc), então as crases aninhadas e as quebras de linha podem causar falhas de parsing. Além disso, se o código inteiro for tratado como string, uma vírgula em algum lugar pode parecer "solta".
Mas o mais provável é que:
🔥 O erro está ocorrendo porque o código está sendo injetado como uma string mal formatada em um contexto como srcdoc ou data: URL, e as crases ou aspas não foram escapadas corretamente.
✅ Solução: Corrigir a injeção do script
Se você está injetando esse script como string (ex: via srcdoc, eval, ou javascript: URL), você não pode usar template strings com quebras de linha e crases diretamente.
✅ Solução1: Transforme o script em uma string segura
Se você precisa injetar esse script como string (ex: em srcdoc), faça assim:
```jsconst scriptContent = (function() { 'use strict'; // ... todo o código, mas ESCAPAR as crases se necessário})();;
iframe.srcdoc = <script> ${scriptContent.replace(/</g, '\\u003c').replace(//g, '\')} </</script> ;
markdown
Copy
Ou, melhor ainda, **injete o script diretamente no DOM**, sem passar por `srcdoc`.
---
### ✅ **Solução2: Injetar diretamente no DOM (recomendado)**Em vez de usar `srcdoc`, **injete o script diretamente na página**:
```jsconst script = document.createElement('script');
script.textContent = `(${yourFunction.toString()})()`;
document.documentElement.appendChild(script);
Mas como seu código já é uma IIFE autoexecutável, você pode fazer:
js// Se estiver num content script (ex: extensão)
Copy
const script = document.createElement('script');
script.textContent = `(${(() => {
'use strict';
// ... todo o seu código aqui})})()`;
document.documentElement.appendChild(script);
script.remove();
Mas o melhor é não injetar como string se possível.
✅ **Solução3: Corrigir o template string com vírgulas (caso raro)**Existe um caso raro em que uma vírgula solta aparece em um objeto ou array. Por exemplo:
jsconst obj = {
Copy
name: 'teste',
, // ❌ vírgula extra};
Mas não há isso no seu código.
✅ Solução4: Verifique como você está carregando o script
Se você está colando isso no console como:
jsjavascript:(function(){ ... })()
Copy
E o código tem crases e quebras de linha, o navegador pode quebrar ao parsear a URL.
➡️ Solução: Não use javascript: URLs com códigos grandes.
Use um bookmarklet gerado corretamente, ou melhor: crie uma extensão ou use o console direto.
✅ Solução5: Versão "segura" para injeção como string
Se você precisa injetar como string, aqui está uma versão do seu código com crases escapadas e tudo em uma linha:
```jsconst safeScript = `(${function() {
'use strict';
if (window.hfInjectorLoaded) {
console.log('HF Injector já foi carregado');
return;
}
window.hfInjectorLoaded = true;
function waitForElement(selector, callback, maxAttempts =50) {
let attempts =0;
function check() {
attempts++;
const element = document.querySelector(selector);
if (element) {
callback(element);
} else if (attempts < maxAttempts) {
setTimeout(check,200);
} else {
console.error(`Elemento não encontrado após ${maxAttempts} tentativas: ${selector}`);
}
}
check();
}
function injectControlPanel() {
const existingPanel = document.getElementById('hf-ai-injector-panel');
if (existingPanel) existingPanel.remove();
const panel = document.createElement('div');
panel.id = 'hf-ai-injector-panel';
panel.style.cssText = 'position: fixed !important; top:20px !important; right:20px !important; width:320px !important; background: white !important; border:2px solid #6366f1 !important; border-radius:12px !important; padding:20px !important; box-shadow:010px25px rgba(0,0,0,0.2) !important; z-index:999999 !important; font-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif !important; font-size:14px !important;';
const isQwen = window.location.href.includes('Qwen') || window.location.href.includes('qwen');
const isZai = window.location.href.includes('zai-org') || window.location.href.includes('zai');
const aiType = isQwen ? 'Qwen' : (isZai ? 'ZAI' : 'HF Chat');
panel.innerHTML = '<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom:15px;"><h3 style="margin:0; color: #333; font-size:16px; font-weight:600;"> 🤖 ' + aiType + ' Injector </h3><button id="close-injector" style="background: none; border: none; font-size:20px; cursor: pointer; color: #666; padding:0; width:24px; height:24px;">×</button></div><div id="injector-controls"><button id="inject-prompt" style="width:100%; background: #6366f1; color: white; border: none; padding:10px; border-radius:6px; cursor: pointer; margin-bottom:10px; font-weight:500; font-size:13px;"> 📝 Injetar Prompt Otimizado </button><button id="auto-fill" style="width:100%; background: #10b981; color: white; border: none; padding:10px; border-radius:6px; cursor: pointer; margin-bottom:10px; font-weight:500
- injector.js +46 -67
|
@@ -61,40 +61,29 @@
|
|
| 61 |
const isQwen = window.location.href.includes('Qwen') || window.location.href.includes('qwen');
|
| 62 |
const isZai = window.location.href.includes('zai-org') || window.location.href.includes('zai');
|
| 63 |
const aiType = isQwen ? 'Qwen' : (isZai ? 'ZAI' : 'HF Chat');
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
<
|
| 72 |
-
|
| 73 |
-
<
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
<button id="send-to-zai" style="width: 100%; background: #8b5cf6; color: white; border: none; padding: 10px; border-radius: 6px; cursor: pointer; font-weight: 500; font-size: 13px;">
|
| 88 |
-
➡️ Enviar para ZAI
|
| 89 |
-
</button>
|
| 90 |
-
` : ''}
|
| 91 |
-
</div>
|
| 92 |
-
|
| 93 |
-
<div id="status-message" style="margin-top: 10px; padding: 8px; background: #f0f9ff; border-radius: 6px; font-size: 12px; color: #0369a1; display: none; white-space: normal; word-wrap: break-word;">
|
| 94 |
-
</div>
|
| 95 |
-
`;
|
| 96 |
-
|
| 97 |
-
document.body.appendChild(panel);
|
| 98 |
|
| 99 |
// Adicionar event listeners
|
| 100 |
document.getElementById('close-injector').onclick = () => {
|
|
@@ -140,43 +129,33 @@
|
|
| 140 |
// Injetar prompt otimizado
|
| 141 |
function injectPrompt() {
|
| 142 |
const isQwen = window.location.href.includes('Qwen') || window.location.href.includes('qwen');
|
| 143 |
-
|
| 144 |
let prompt;
|
| 145 |
if (isQwen) {
|
| 146 |
-
prompt =
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
3. Forneça o código COMPLETO e corrigido
|
| 159 |
-
4. Sem explicações extras, apenas o formato acima
|
| 160 |
-
|
| 161 |
-
=== CÓDIGO PARA ANÁLISE ===`;
|
| 162 |
} else {
|
| 163 |
-
prompt =
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
===
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
2. Sem explicações
|
| 174 |
-
3. Formato exato acima
|
| 175 |
-
|
| 176 |
-
=== ENTRADA DO QWEN ===`;
|
| 177 |
}
|
| 178 |
-
|
| 179 |
-
// Tentar encontrar o textarea de várias maneiras
|
| 180 |
const selectors = [
|
| 181 |
'textarea[data-testid="chat-input"]',
|
| 182 |
'textarea[placeholder*="Message"]',
|
|
|
|
| 61 |
const isQwen = window.location.href.includes('Qwen') || window.location.href.includes('qwen');
|
| 62 |
const isZai = window.location.href.includes('zai-org') || window.location.href.includes('zai');
|
| 63 |
const aiType = isQwen ? 'Qwen' : (isZai ? 'ZAI' : 'HF Chat');
|
| 64 |
+
panel.innerHTML = '<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;">' +
|
| 65 |
+
'<h3 style="margin: 0; color: #333; font-size: 16px; font-weight: 600;">' +
|
| 66 |
+
'🤖 ' + aiType + ' Injector' +
|
| 67 |
+
'</h3>' +
|
| 68 |
+
'<button id="close-injector" style="background: none; border: none; font-size: 20px; cursor: pointer; color: #666; padding: 0; width: 24px; height: 24px;">×</button>' +
|
| 69 |
+
'</div>' +
|
| 70 |
+
'<div id="injector-controls">' +
|
| 71 |
+
'<button id="inject-prompt" style="width: 100%; background: #6366f1; color: white; border: none; padding: 10px; border-radius: 6px; cursor: pointer; margin-bottom: 10px; font-weight: 500; font-size: 13px;">' +
|
| 72 |
+
'📝 Injetar Prompt Otimizado' +
|
| 73 |
+
'</button>' +
|
| 74 |
+
'<button id="auto-fill" style="width: 100%; background: #10b981; color: white; border: none; padding: 10px; border-radius: 6px; cursor: pointer; margin-bottom: 10px; font-weight: 500; font-size: 13px;">' +
|
| 75 |
+
'🔄 Colar da Área de Transferência' +
|
| 76 |
+
'</button>' +
|
| 77 |
+
'<button id="extract-response" style="width: 100%; background: #f59e0b; color: white; border: none; padding: 10px; border-radius: 6px; cursor: pointer; margin-bottom: 10px; font-weight: 500; font-size: 13px;">' +
|
| 78 |
+
'📋 Copiar Resposta' +
|
| 79 |
+
'</button>' +
|
| 80 |
+
(isQwen ? '<button id="send-to-zai" style="width: 100%; background: #8b5cf6; color: white; border: none; padding: 10px; border-radius: 6px; cursor: pointer; font-weight: 500; font-size: 13px;">' +
|
| 81 |
+
'➡️ Enviar para ZAI' +
|
| 82 |
+
'</button>' : '') +
|
| 83 |
+
'</div>' +
|
| 84 |
+
'<div id="status-message" style="margin-top: 10px; padding: 8px; background: #f0f9ff; border-radius: 6px; font-size: 12px; color: #0369a1; display: none; white-space: normal; word-wrap: break-word;">' +
|
| 85 |
+
'</div>';
|
| 86 |
+
document.body.appendChild(panel);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
|
| 88 |
// Adicionar event listeners
|
| 89 |
document.getElementById('close-injector').onclick = () => {
|
|
|
|
| 129 |
// Injetar prompt otimizado
|
| 130 |
function injectPrompt() {
|
| 131 |
const isQwen = window.location.href.includes('Qwen') || window.location.href.includes('qwen');
|
|
|
|
| 132 |
let prompt;
|
| 133 |
if (isQwen) {
|
| 134 |
+
prompt = 'Você é um especialista em análise de código com alta autonomia.\n\n' +
|
| 135 |
+
'=== TAREFA PRINCIPAL ===\n' +
|
| 136 |
+
'Analise o código fornecido e identifique TODOS os problemas possíveis.\n\n' +
|
| 137 |
+
'=== FORMATO DE SAÍDA OBRIGATÓRIO ===\n' +
|
| 138 |
+
'Para cada arquivo com problemas:\n' +
|
| 139 |
+
'nome/do/arquivo.ext"código_completo_corrigido"\n\n' +
|
| 140 |
+
'=== REGRAS ===\n' +
|
| 141 |
+
'1. Use sempre aspas para delimitar o código\n' +
|
| 142 |
+
'2. Inclua o caminho completo do arquivo\n' +
|
| 143 |
+
'3. Forneça o código COMPLETO e corrigido\n' +
|
| 144 |
+
'4. Sem explicações extras, apenas o formato acima\n\n' +
|
| 145 |
+
'=== CÓDIGO PARA ANÁLISE ===';
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
} else {
|
| 147 |
+
prompt = 'Você é um finalizador de código.\n\n' +
|
| 148 |
+
'=== TAREFA ===\n' +
|
| 149 |
+
'Receba o diagnóstico do Qwen e produza o código final corrigido.\n\n' +
|
| 150 |
+
'=== FORMATO EXATO ===\n' +
|
| 151 |
+
'nome/do/arquivo.ext"código_final_completo"\n\n' +
|
| 152 |
+
'=== REGRAS ===\n' +
|
| 153 |
+
'1. Apenas o código corrigido\n' +
|
| 154 |
+
'2. Sem explicações\n' +
|
| 155 |
+
'3. Formato exato acima\n\n' +
|
| 156 |
+
'=== ENTRADA DO QWEN ===';
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
}
|
| 158 |
+
// Tentar encontrar o textarea de várias maneiras
|
|
|
|
| 159 |
const selectors = [
|
| 160 |
'textarea[data-testid="chat-input"]',
|
| 161 |
'textarea[placeholder*="Message"]',
|