diff --git a/packages/metascraper-audio/package.json b/packages/metascraper-audio/package.json
index 89a2ac77e..e1f93c7f5 100644
--- a/packages/metascraper-audio/package.json
+++ b/packages/metascraper-audio/package.json
@@ -28,6 +28,7 @@
"p-reflect": "~2.1.0"
},
"devDependencies": {
+ "async-listen": "latest",
"ava": "5"
},
"engines": {
diff --git a/packages/metascraper-audio/src/index.js b/packages/metascraper-audio/src/index.js
index 0e501ac4c..004acbecf 100644
--- a/packages/metascraper-audio/src/index.js
+++ b/packages/metascraper-audio/src/index.js
@@ -79,7 +79,7 @@ module.exports = ({ getIframe = _getIframe } = {}) => {
audio: audioRules.concat(
async ({ htmlDom: $, url }) => {
const srcs = [
- ...new $('iframe')
+ ...new $('iframe[src^="http"], iframe[src^="/"]')
.map((_, element) => $(element).attr('src'))
.get()
.map(src => normalizeUrl(url, src))
diff --git a/packages/metascraper-audio/test/iframe.js b/packages/metascraper-audio/test/iframe.js
new file mode 100644
index 000000000..6e70c829f
--- /dev/null
+++ b/packages/metascraper-audio/test/iframe.js
@@ -0,0 +1,57 @@
+'use strict'
+
+const { default: listen } = require('async-listen')
+const { createServer } = require('http')
+const { promisify } = require('util')
+const test = require('ava')
+
+const closeServer = server => promisify(server.close)
+
+const createMetascraper = (...args) =>
+ require('metascraper')([require('../src')(...args)])
+
+test('absolute http', async t => {
+ const server = createServer((_, res) => {
+ res.setHeader('Content-Type', 'text/html')
+ res.end(
+ ''
+ )
+ })
+
+ t.teardown(() => closeServer(server))
+ const url = (await listen(server, { port: 0, host: '0.0.0.0' })).toString()
+ const html = `