Commit 389913c4 authored by Stefy Spora's avatar Stefy Spora

Fix MetaMask detection issue

- Moved Web3 donation functionality to content script where window.ethereum is accessible
- Updated popup to communicate with content script via messages
- Fixed 'MetaMask not detected' error when extension was properly installed
parent 6f77a0e3
......@@ -386,6 +386,54 @@
}
}
// Function to handle Web3 donation
async function executeWeb3Donation() {
try {
// Check if MetaMask is installed
if (typeof window.ethereum === 'undefined') {
return { success: false, message: 'MetaMask not detected. Please install MetaMask extension.' };
}
// Request account access
const accounts = await window.ethereum.request({
method: 'eth_requestAccounts'
});
if (accounts.length === 0) {
return { success: false, message: 'No accounts found. Please unlock MetaMask.' };
}
const donationAddress = '0xdA6dAb526515b5cb556d20269207D43fcc760E51';
// Prepare transaction parameters (user can modify amount in MetaMask)
const transactionParameters = {
to: donationAddress,
from: accounts[0],
value: '0x16345785D8A0000', // 0.1 ETH in wei (default amount, user can change)
gas: '0x5208', // 21000 gas limit for simple transfer
};
// Send transaction
const txHash = await window.ethereum.request({
method: 'eth_sendTransaction',
params: [transactionParameters],
});
return { success: true, message: `Transaction sent! Hash: ${txHash.substring(0, 10)}...` };
} catch (error) {
console.error('Web3 donation error:', error);
if (error.code === 4001) {
return { success: false, message: 'Transaction cancelled by user.' };
} else if (error.code === -32602) {
return { success: false, message: 'Invalid transaction parameters.' };
} else {
return { success: false, message: `Transaction failed: ${error.message}` };
}
}
}
// Listen for messages from popup
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === 'executePrivacyUpdate') {
......@@ -398,6 +446,11 @@
sendResponse(result);
});
return true; // Keep message channel open for async response
} else if (request.action === 'executeWeb3Donation') {
executeWeb3Donation().then(result => {
sendResponse(result);
});
return true; // Keep message channel open for async response
}
});
......
......@@ -235,76 +235,29 @@ document.addEventListener('DOMContentLoaded', function() {
web3DonateBtn.addEventListener('click', async function() {
try {
// Execute Web3 donation in the active tab context
web3DonateBtn.disabled = true;
web3DonateBtn.textContent = '🔄 Connecting...';
// Get the current active tab
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
const results = await chrome.scripting.executeScript({
target: { tabId: tab.id },
function: executeWeb3Donation
// Send message to content script to handle Web3 donation
const response = await chrome.tabs.sendMessage(tab.id, {
action: 'executeWeb3Donation'
});
const result = results[0].result;
showWeb3Status(result.message, !result.success);
showWeb3Status(response.message, !response.success);
} catch (error) {
console.error('Web3 donation error:', error);
showWeb3Status('Failed to initiate donation: ' + error.message, true);
showWeb3Status('Failed to initiate donation. Make sure you are on a FetLife page.', true);
} finally {
web3DonateBtn.disabled = false;
web3DonateBtn.textContent = '🦊 Donate with MetaMask';
}
});
});
// Function to be injected for Web3 donation
function executeWeb3Donation() {
return new Promise(async (resolve) => {
try {
// Check if MetaMask is installed
if (typeof window.ethereum === 'undefined') {
resolve({ success: false, message: 'MetaMask not detected. Please install MetaMask extension.' });
return;
}
// Request account access
const accounts = await window.ethereum.request({
method: 'eth_requestAccounts'
});
if (accounts.length === 0) {
resolve({ success: false, message: 'No accounts found. Please unlock MetaMask.' });
return;
}
const donationAddress = '0xdA6dAb526515b5cb556d20269207D43fcc760E51';
// Prepare transaction parameters (user can modify amount in MetaMask)
const transactionParameters = {
to: donationAddress,
from: accounts[0],
value: '0x16345785D8A0000', // 0.1 ETH in wei (default amount, user can change)
gas: '0x5208', // 21000 gas limit for simple transfer
};
// Send transaction
const txHash = await window.ethereum.request({
method: 'eth_sendTransaction',
params: [transactionParameters],
});
resolve({ success: true, message: `Transaction sent! Hash: ${txHash.substring(0, 10)}...` });
} catch (error) {
console.error('Web3 donation error:', error);
if (error.code === 4001) {
resolve({ success: false, message: 'Transaction cancelled by user.' });
} else if (error.code === -32602) {
resolve({ success: false, message: 'Invalid transaction parameters.' });
} else {
resolve({ success: false, message: `Transaction failed: ${error.message}` });
}
}
});
}
// Function to find and click the next link
function findAndClickNext() {
try {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment