Truffle

DOMException:使用 Metamask 和 truffle Ganache 時無法在“Window”錯誤上執行“postMessage”

  • March 4, 2019

Uncaught (in promise) DOMException當我使用 Metamask(chrome) 和 truffle Ganache 開發 Nuxt Web 應用程序時,我遇到瞭如下錯誤。

Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Window': function (error, response) {
             _this2.removeAllListeners(payload.id);
             if (!error) {
...<omitted>... } could not be cloned.

我試圖做的是將交易發送到本地區塊鏈(Ganache)。

   async sendTransaction(obj) {
     const web3 = await getWeb3();
     // get account
     const accounts = await web3.eth.getAccounts();
     const roomFactory = await getRoomFactory();

     // *ERROR OCCURS HERE*
     const result = await roomFactory.methods
       .createNewRoom(obj._roomId)
       .send({ from: accounts[0] });
     console.log("result", result);
   },

功能getWeb3()如下getRoomFactory()

// getWeb()

const getWeb3 = () =>
 new Promise(async (resolve, reject) => {
   // Modern dapp browsers...
   if (window.ethereum) {
     const web3 = new Web3(window.ethereum);
     try {
       // Request account access if needed
       await window.ethereum.enable();
       // Acccounts now exposed
       resolve(web3);
     } catch (error) {
       reject(error);
     }
   }
   // Legacy dapp browsers...
   else if (window.web3) {
     try {
       // Use Mist/MetaMask's provider.
       const web3 = new Web3(window.web3.currentProvider);
       console.log("Injected web3 detected.");
       resolve(web3);
     } catch (error) {
       reject(error);
     }
   }
   // Fallback to localhost; use dev console port by default...
   else {
     try {
       const provider = new Web3.providers.HttpProvider(
         "http://127.0.0.1:8545"
       );
       const web3 = new Web3(provider);
       console.log("No web3 instance injected, using Local web3.");
       resolve(web3);
     } catch (error) {
       reject(error);
     }
   }
 });
import getWeb3 from "~/plugins/web3.js";
import RoomFactory from "./build/contracts/RoomFactory.json"; // which is build by truffle

const getRoomFactory = async () => {
 const web3 = await getWeb3();

 const abi = RoomFactory.abi;
 const networks = RoomFactory.networks["5781"];
 return web3.eth.Contract(abi, networks.address);
};

我可以做什麼:

  • 從元遮罩提供者獲取帳戶 ( web3.eth.getAccounts())
  • 獲得餘額 ( web3.eth.getBalance(accounts[0]))

我不能做什麼:

  • 將交易發送到其他合約 ( Mycontract.methods.myfunction().send())
  • 呼叫 ( Mycontract.methods.myfunction().call())

截圖_1

版本:

  • Web3:1.0.0-beta.36
  • 元遮罩:5.3.2
  • 松露:5.0.1

類似的問題metamask-extension是關於.

如果您能幫我一些建議,我將不勝感激。謝謝你。

我通過安裝1.0.0-beta.37解決了這個問題。

我使用 1.0.0-beta.37(有時)遇到了同樣的錯誤。意思是,我將應用程序複製到另一個目錄中。沒有在伺服器端或客戶端站點複製節點模組(它是帶有 DApp 的 MERN)。我使用 >> npm install 重新生成了它們(複製 heroku 中發生的事情)

在原始情況下,它有效(仍然有效)。在新目錄(複製的應用程序)中。..它拋出上面的錯誤。我將它與 npm install 相關聯,做一些不同的事情。

引用自:https://ethereum.stackexchange.com/questions/66424