MicrosoftEdge / MicrosoftEdge/WebView2Feedback

Element not found when using async API

Open
#2,772 4 comments 2 reactions 1 assignee View on GitHub

Nobody has claimed this yet.

bug
Dominant language
PowerShell
Stars
526
Forks
67
PR merge metrics
No merged PRs in 30d

Description

Description
Calling the injection object in async manner from .net6 project, it reported "Element not found" sometimes。

Version
SDK: 1.0.1293.44
Runtime: 103.0.1264.77
Framework: .net6
OS: NA

Repro Steps
`
// On my .net side

  [ClassInterface(ClassInterfaceType.None)]
  [ComVisible(true)]
  public class RpcClientWrapper
  {
       public RpcClient MakeRequestAsync(string request, object successCallback, object errorCallback,
          object progressCallback)
       {
          var rpcClient = new RpcClient();
          // ... do something 
          return rpcClient;
     }
 }

[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Launcher
{
    public void QueryUriSupportAsync(string request, object successCallback)
    {
        // ... do something 
    }
}


[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class InjectoinRoot {
    private RpcClientWrapper _RpcClient;

    public static InjectoinRoot Instance { get; } = new InjectoinRoot();

    public RpcClientWrapper RpcClient
    {
        get
        {
            _RpcClient ??= new RpcClientWrapper();
            return _RpcClient;
        }
    }

    public Launcher Launcher = new Launcher();
}

webView.CoreWebView2.AddHostObjectToScript("vantageAPI", InjectoinRoot.Instance);


// on web side

// case 1:
window.shimContext = {
    asyncAPI: window.top.chrome.webview.hostObjects.vantageAPI
}

function makeRequestAsync(request: string): void {
    const rpcClient = shimContext.asyncAPI.VantageRpcClient.MakeRequestAsync(
      request,
      (response: string) => {
        // do something
      },
      (intermediate: string) => {
        // do something
      },
      (response: string) => {
        // do something
      },
    );
}

// ... do something
makeRequestAsync('something');
// ... do something


// case 2
function getAsyncAPI() {
    return window.top.chrome.webview.hostObjects.vantageAPI;
}

function promisize<T>(injectedAPI: any, args: any[]) {
    return new Promise<T>((resolve, reject) => {
      try {
        // ... some simle logic
        injectedAPI(...args, (result)=> {resolve(result)}, ()=> {}, (ex)=>{reject(ex)});
      } catch (ex: any) {
        console.error(`promisize - reject ${JSON.stringify(args)}`, ex);
        reject(ex.message);
      }
    });
}

// ... do something
const promiseResult = promisize(getAsyncAPI().Launcher.QueryUriSupportAsync, 'some url');
// ... do something

`

Screenshots
// see error log in console -- log 1
you can see the "Sending remote release message 698" happened for 'VantageRpcClient' then the subsequence request(callId: 16305) for its property will then fail.
`
/*
Line 18678: VM8:3071 post remote message {remoteObjectId: 1, methodName: 'VantageRpcClient', parameters: {…}, callId: 16126, sync: undefined}
Line 23301: VM8:3071 Sending remote release message 698 undefined
Line 24169: VM8:3071 remoteproxycall event {remoteObjectId: 0, methodName: '', parameters: {…}, callId: 16126}

VM8:3071 post remote message {remoteObjectId: 698, methodName: 'MakeRequestAsync', parameters: {…}, callId: 16305, sync: undefined}

VM8:3071 remoteproxycall event {remoteObjectId: 0, methodName: '', parameters: {…}, callId: 16305}
core.js:6498

ERROR Error: Uncaught (in promise): Object: {"remoteObjectId":0,"methodName":"","parameters":{"error":"Element not found. (0x80070490)","kind":"response"},"callId":16305}
*/
`

// see error log in console -- log 2
you can see the "Sending remote release message 866" happened for 'VantageRpcClient' then the subsequence request(callId: 11970) for its property will then fail.
`
...
Line 19078: VM8:3071 watching for cleanup of 7656 (QueryUriSupportAsync) undefined
Line 32760: VM8:3071 post remote message {remoteObjectId: 866, methodName: 'QueryUriSupportAsync', parameters: {…}, callId: 10821, sync: undefined}
Line 32807: VM8:3071 watching for cleanup of 11775 (QueryUriSupportAsync) undefined
Line 32808: VM8:3071 watching for cleanup of 11776 (QueryUriSupportAsync) undefined

Line 32257: VM8:3071 post remote message {remoteObjectId: 1, methodName: 'Launcher', parameters: {…}, callId: 10664, sync: undefined}
Line 32759: VM8:3071 watching for cleanup of 11757 (Launcher) undefined
Line 35671: VM8:3071 post remote message {remoteObjectId: 1, methodName: 'Launcher', parameters: {…}, callId: 11755, sync: undefined}


Line 37051: VM8:3071 Sending remote release message 866 undefined


Line 38467: VM8:3071 watching for cleanup of 13116 (Launcher) undefined
Line 38468: VM8:3071 post remote message {remoteObjectId: 866, methodName: 'QueryUriSupportAsync', parameters: {…}, callId: 11970, sync: undefined}callId: 11970methodName: "QueryUriSupportAsync"parameters: {kind: 'request', options: {…}, parameters: Array(0)}remoteObjectId: 866sync: undefined[[Prototype]]: Object
Line 38572: Launcher.queryUriSupportAsync @ VM277:2763
VM8:3071 remoteproxycall event {remoteObjectId: 0, methodName: '', parameters: {…}, callId: 11970}
zone.js:1061 
    
   Unhandled Promise rejection: {remoteObjectId: 0, methodName: '', parameters: {…}, callId: 11970} ; Zone: <root> ; Task: Promise.then ; Value: {remoteObjectId: 0, methodName: '', parameters: {…}, callId: 11970}callId: 11970methodName: ""parameters: error: "Element not found. (0x80070490)"kind: "response"[[Prototype]]: ObjectremoteObjectId: 0[[Prototype]]: Object undefined
   

Line 43899: VM8:3071 post remote message {remoteObjectId: 1, methodName: 'Launcher', parameters: {…}, callId: 13742, sync: undefined}
Line 43910: VM8:3071 post remote message {remoteObjectId: 1, methodName: 'Launcher', parameters: {…}, callId: 13745, sync: undefined}
Line 43912: VM8:3071 watching for cleanup of 15149 (Launcher) undefined
Line 43913: VM8:3071 post remote message {remoteObjectId: 933, methodName: 'QueryUriSupportAsync', parameters: {…}, callId: 13746, sync: undefined}
Line 43922: VM8:3071 watching for cleanup of 15153 (Launcher) undefined

`

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.