-
Notifications
You must be signed in to change notification settings - Fork 1
Troubleshooting
Solutions to common issues with Web Guide.
Before diving into specific issues, try these quick fixes:
- Refresh the page - Many issues are resolved by reloading
-
Restart the extension - Toggle it off/on in
chrome://extensions - Check permissions - Ensure microphone access is granted
- View console - Right-click page → Inspect → Console for errors
- Test on a simple page - Try Wikipedia to isolate the issue
Symptoms:
- "Failed to load extension" error
- Extension card doesn't appear
- No icon in toolbar
Solutions:
✅ Check file structure
Effin-IEEE-WebGuide-main/
├── manifest.json ← Must be in root
├── popup.html
├── popup.js
└── ...
✅ Verify manifest.json
- File must be valid JSON (use a JSON validator)
- No syntax errors
- All referenced files exist
✅ Enable Developer Mode
chrome://extensions- Toggle "Developer mode" in top-right
✅ Check Chrome version
- Must be Chrome 88 or higher
- Update Chrome if needed
✅ Remove and reload
1. Click "Remove" on extension
2. Click "Load unpacked" again
3. Select folder
Symptoms:
- Extension appears in
chrome://extensions - No icon in toolbar
Solutions:
✅ Pin the extension
1. Click puzzle piece icon in toolbar
2. Find "Web Guide"
3. Click pin icon
✅ Check icon files exist
icons/
├── icon16.png
├── icon48.png
└── icon128.png
✅ Restart Chrome
Symptoms:
- "Cannot access chrome:// URLs"
- "Extension is not allowed on this page"
Solutions:
✅ These pages are blocked by design:
-
chrome://pages (settings, extensions) -
chrome-extension://pages - Chrome Web Store pages
✅ For other pages:
- Check
manifest.jsonhas"host_permissions": ["<all_urls>"] - Reload extension after manifest changes
Symptoms:
- "Microphone permission denied"
- No voice recognition
- Button doesn't activate
Solutions:
✅ Grant microphone permission
1. Click lock icon in address bar
2. Find "Microphone"
3. Set to "Allow"
4. Refresh page
✅ Check browser permissions
chrome://settings/content/microphone
→ Ensure not blocked
✅ Test microphone in other apps
- Verify hardware works
- Check system audio settings
- Try different browser
✅ Check for HTTPS
- Voice API requires secure context
- Use HTTPS sites (not HTTP)
Symptoms:
- Commands transcribed incorrectly
- Random words recognized
- Poor accuracy
Solutions:
✅ Improve audio conditions
- Reduce background noise
- Speak clearly and at normal pace
- Position microphone closer
✅ Check language settings
// In popup.js, ensure:
recognition.lang = 'en-US'; // Or your language✅ Use simpler commands
- "Find search bar" instead of "Where's the search?"
- Short, clear phrases
- Avoid complex sentences
Symptoms:
- No audio from text-to-speech
- Silent responses
Solutions:
✅ Check audio output
- System volume not muted
- Browser not muted in system mixer
- Audio device connected
✅ Test Speech Synthesis
// In browser console:
speechSynthesis.speak(new SpeechSynthesisUtterance('Test'));✅ Verify feature enabled
// In config.js:
const VOICE_OUTPUT = true;Symptoms:
- "Failed to get response"
- Loading spinner never stops
- Console errors about fetch
Solutions:
✅ Check API key
// In config.js:
const GROQ_API_KEY = 'gsk_...'; // Must start with 'gsk_'✅ Test API key manually
curl https://api.groq.com/openai/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"llama-3.3-70b-versatile","messages":[{"role":"user","content":"test"}]}'✅ Check Groq API status
- Visit https://status.groq.com/
- Check for outages
- Review rate limits
✅ Verify network connection
// In browser console:
fetch('https://api.groq.com/openai/v1/models')
.then(r => r.json())
.then(console.log)
.catch(console.error);✅ Check CORS issues
- Groq API should allow browser requests
- If blocked, consider backend proxy
Symptoms:
- "Rate limit exceeded"
- 429 status code
- API works then stops
Solutions:
✅ Wait and retry
- Free tier has limits (check Groq docs)
- Wait a few minutes
- Try again
✅ Upgrade API plan
- Free tier: limited requests/day
- Paid tier: higher limits
✅ Implement request throttling
// Add debouncing to avoid rapid requests
let lastRequestTime = 0;
const MIN_REQUEST_INTERVAL = 2000; // 2 seconds
async function callAPI() {
const now = Date.now();
if (now - lastRequestTime < MIN_REQUEST_INTERVAL) {
throw new Error('Please wait before next request');
}
lastRequestTime = now;
// ... make request
}Symptoms:
- No visual feedback
- AI responds but nothing highlights
- "Element not found" in console
Solutions:
✅ Check element exists
// In console:
document.querySelector(selector); // Returns element or null✅ Verify selector format
// Valid selectors:
'#search-input' // ✅ ID
'.btn-primary' // ✅ Class
'button[type="submit"]' // ✅ Attribute
'div > a:first-child' // ✅ Complex
// Invalid:
'search input' // ❌ Space without combinator
'#my-id#other-id' // ❌ Multiple IDs✅ Check for dynamic content
- Element may load after script runs
- Try refreshing page
- Wait for page to fully load
✅ Check for Shadow DOM
// Shadow DOM elements not accessible via querySelector
// Currently limited support✅ Inspect CSS injection
// Verify content.css is loaded:
const style = document.querySelector('link[href*="content.css"]');
console.log('CSS loaded:', !!style);Symptoms:
- Arrow points to wrong place
- Highlight offset from element
- Tooltip in wrong position
Solutions:
✅ Check for CSS transforms
/* Parent transforms can affect positioning */
.parent {
transform: scale(1.1); /* May offset calculations */
}✅ Scroll and retry
- Manually scroll element into view
- Try command again
✅ Check viewport size
- Resize browser window
- Try on different screen resolution
✅ Check z-index conflicts
/* Ensure high z-index */
.webguide-highlight {
z-index: 999999 !important;
}Symptoms:
- Clicking doesn't remove highlight
- Highlights persist
- Multiple highlights stack
Solutions:
✅ Click outside highlighted element
- Click page background
- Click empty space
✅ Manually clear
// In console:
document.querySelectorAll('.webguide-arrow, .webguide-tooltip, .webguide-highlight')
.forEach(el => el.remove());✅ Refresh page
- Ultimate reset
- Clears all highlights
Symptoms:
- Works on most sites
- Fails on certain domains
- Console errors on specific pages
Solutions:
✅ Check for content security policy (CSP)
// Some sites block injected scripts
// Check console for CSP errors✅ Check for iframe restrictions
// Extension can't access cross-origin iframes
// Some embedded content may be inaccessible✅ Sites with known issues:
- Gmail (heavy use of Shadow DOM)
- Google Docs (complex iframe structure)
- Banking sites (CSP restrictions)
✅ Workarounds:
- Refresh page after it loads
- Wait longer before using extension
- Try on simpler pages on same domain
Symptoms:
- Works on initial load
- Breaks when navigating
- Stale page data
Solutions:
✅ Refresh after navigation
- SPAs don't reload content script
- Manual refresh may be needed
✅ Wait for content to load
- Dynamic content takes time
- Wait before issuing commands
✅ Future enhancement:
// Monitor URL changes
let lastUrl = location.href;
setInterval(() => {
if (location.href !== lastUrl) {
lastUrl = location.href;
reinitialize();
}
}, 1000);Symptoms:
- Pages load slowly
- High CPU/memory usage
- Browser freezes
Solutions:
✅ Check for memory leaks
// In chrome://extensions → inspect background page
// Look for growing memory usage✅ Clear highlights regularly
// Add auto-cleanup
setInterval(() => {
VisualGuide.clearHighlights();
}, 10000); // Every 10 seconds✅ Limit element extraction
// In content.js, reduce MAX_ELEMENTS:
const MAX_ELEMENTS = 50; // Instead of 100✅ Disable unused features
// In config.js:
const VOICE_OUTPUT = false; // If not neededSymptoms:
- Long wait times
- Timeout errors
- Loading state persists
Solutions:
✅ Check network speed
- Test internet connection
- Try on faster network
✅ Reduce prompt size
// Truncate page text more aggressively
const MAX_PAGE_TEXT = 2000; // Instead of 5000✅ Use faster model
// In config.js:
const GROQ_MODEL = 'llama-3.1-8b-instant'; // Faster, less accurateCause: Trying to access property on null/undefined object
Fix:
// Before:
const text = element.textContent;
// After:
const text = element?.textContent || '';Cause: Trying to message between different origins
Fix:
// Ensure proper origin checking
if (event.origin !== window.location.origin) return;Cause: Extension reloaded while page open
Fix:
- Refresh the page
- Reload extension less frequently
Cause: Network issue or API endpoint down
Fix:
- Check internet connection
- Verify API status
- Check firewall/proxy settings
Add this to config.js:
const DEBUG = true;
function debug(...args) {
if (DEBUG) console.log('[WebGuide Debug]', ...args);
}When reporting issues, include:
1. Browser: Chrome 120.0.6099.129
2. OS: Windows 11
3. Extension version: 1.0.0
4. URL where issue occurs: https://example.com
5. Steps to reproduce:
- Step 1
- Step 2
- Step 3
6. Console errors: [paste here]
7. Expected behavior: [describe]
8. Actual behavior: [describe]
If you can't resolve the issue:
- Check existing issues
- Create new issue with diagnostic info
- Include screenshots if applicable
- Tag with appropriate label
- Discussions for questions
- FAQ for common questions
- Technical Documentation for implementation details
✅ Keep extension updated
- Watch for new releases
- Read changelog before updating
✅ Test before relying on it
- Try on test sites first
- Verify functionality
✅ Monitor API usage
- Track requests if on free tier
- Set up usage alerts
✅ Backup your configuration
# Save your config.js
cp config.js config.backup.js✅ Use version control
git init
git add .
git commit -m "Working state"