chrome-devtools-mcp-for-extension 0.9.5 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,29 +69,33 @@ export async function inspectIframe(cdp, urlPattern, waitMs = 8000) {
69
69
  };
70
70
  }
71
71
  catch (oopifError) {
72
- // Fallback: Try regular iframe via Page.getFrameTree
73
- await cdp.send('Page.enable');
74
- const { frameTree } = await cdp.send('Page.getFrameTree');
75
- const findFrame = (node) => {
76
- if (urlPattern.test(node.frame.url)) {
77
- return node.frame;
78
- }
79
- if (node.childFrames) {
80
- for (const child of node.childFrames) {
81
- const found = findFrame(child);
82
- if (found)
83
- return found;
84
- }
72
+ // Fallback: Try regular iframe via DOM.querySelectorAll
73
+ await cdp.send('DOM.enable');
74
+ const { root } = await cdp.send('DOM.getDocument', { depth: -1 });
75
+ // Query all iframes
76
+ const { nodeIds } = await cdp.send('DOM.querySelectorAll', {
77
+ nodeId: root.nodeId,
78
+ selector: 'iframe',
79
+ });
80
+ // Find the iframe matching the pattern
81
+ let targetFrameId = null;
82
+ let targetFrameUrl = null;
83
+ for (const nodeId of nodeIds) {
84
+ const { node } = await cdp.send('DOM.describeNode', { nodeId });
85
+ const src = node.attributes?.find((attr, i, arr) => attr === 'src' && arr[i + 1]);
86
+ const srcValue = src ? node.attributes[node.attributes.indexOf(src) + 1] : '';
87
+ if (urlPattern.test(srcValue)) {
88
+ targetFrameId = node.frameId || null;
89
+ targetFrameUrl = srcValue;
90
+ break;
85
91
  }
86
- return null;
87
- };
88
- const frame = findFrame(frameTree);
89
- if (!frame) {
92
+ }
93
+ if (!targetFrameId || !targetFrameUrl) {
90
94
  throw new Error(`Iframe not found (tried both OOPIF and regular iframe): ${urlPattern}`);
91
95
  }
92
96
  // Execute in the frame context using Page.createIsolatedWorld
93
97
  const { executionContextId } = await cdp.send('Page.createIsolatedWorld', {
94
- frameId: frame.id,
98
+ frameId: targetFrameId,
95
99
  });
96
100
  await cdp.send('Runtime.enable');
97
101
  const htmlResult = await cdp.send('Runtime.evaluate', {
@@ -101,8 +105,8 @@ export async function inspectIframe(cdp, urlPattern, waitMs = 8000) {
101
105
  });
102
106
  const html = String(htmlResult?.result?.value ?? '');
103
107
  return {
104
- frameId: frame.id,
105
- frameUrl: frame.url,
108
+ frameId: targetFrameId,
109
+ frameUrl: targetFrameUrl,
106
110
  html,
107
111
  };
108
112
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chrome-devtools-mcp-for-extension",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "MCP server for Chrome extension development with Web Store automation. Fork of chrome-devtools-mcp with extension-specific tools.",
5
5
  "type": "module",
6
6
  "bin": "./build/src/index.js",