Главный косяк вот:
link.onclick = function(e) {
this.setAttribute( // this - это link, и именно ему вы устанавливаете атрибут src, который ничего не делает
'src',
this.getAttribute('src') // опять this, который указывааеет на link
.replace("сюда подставить данные из input",quantity.value));
}
по мелочи:
1. replace делать не нужно, можно сразу ставить новое значение:
iframe.src = quantity.value;
2. почему-то input для адреса называется quantity, что переводится как "количество". Пытаетесь запутать врагов?
3. использовать onclick довольно просто, но вы этим можете наплодить багов.
function hello(){
console.log('hello');
}
function goodbye(){
console.log('goodbye');
}
button1.onclick = hello;
button1.onclick = goodbye;
button2.addEventListener('click', hello);
button2.addEventListener('click', goodbye);
// при нажатии на первую кнопку сработает только goodbye, т.к. мы перезаписали свойство onclick
// при нажатии на вторую сработают обе функции, как и задумывалось
4. обращаться к элементам используя переменные совпадающие с id элемента конечно удобно, но осторожнее с этим, эта фича часто
ломается когда другой код использует переменные с такими-же именами. И поверьте, переменная link может встречаться очень часто.
upd: