I'm using GopherJS, and there are two ways to execute a function, via Call()
or via Invoke()
. Initially I was using code similar to this:
js.Global.Get("navigator").Get("credentials").Get("store").Invoke(
password.New(js.M{"id": id, "password": pass, "name": email}),
)
But it turned out to be:
Uncaught (in promise) TypeError: Failed to execute 'store' on 'CredentialsContainer': Illegal invocation at: 1: 36
So I decided to test Call
, using js.Global.Get("navigator").Get("credentials").Call("store", ...)
, this worked, but I was curious because Invoke
did not work.
In Javascript, it looks like it behaves similarly if you do:
x = window.navigator.credentials.store;
x(new PasswordCredential({id: "a", password:"b"}))
Or, if you do:
window.navigator.credentials.store.call(
new PasswordCredential({id: "a", password:"b"})
)
In both cases it results in the error of Illegal invocation
.
Why does this error occur? Why does it only occur with some functions / objects? Is there a way to identify whether there is a way to use Invoke
(or, Call
of Javascript?) Before causing the error?