我想在新窗口中打开音频控件,并将文件名从MVC5视图传递给音频控件。
我可以在MVC5视图中使用以下代码打开一个简单的html页面:
<a href="Music/Music.html"
onclick="window.open('Music/Music.html',
'newwindow',
'width=600,height=200');
return false;">html Link</a>
然后,Music.html页面使用以下代码加载并播放文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<audio controls>
<source src="001.mp3" type="audio/mp3"> audio playback requires IE9 or above
</audio>
</body>
</html>
一切都很好,但我真的想把文件名传递到新页面,所以src
加载了我传递的任何文件名。我不知道如何做到这一点,或者是否有更好的方法来使用MVC5的其他功能来做到这一点。
根据Joe Warner提出的答案在原帖后添加:
此代码放在Home控制器的index.vbhtml中:
@Code
Dim myUrl As String = "Music/Music.html?003.mp3"
End Code
<a href="@myUrl"
onclick="window.open('@myUrl','_blank','width=600,height=100');
return false;">
html link a
</a>
<a href="@myUrl" onclick="myOpenWindow">
html link b
</a>
@Section Scripts
<script type="text/javascript">
function myOpenWindow() {
window.open('@myUrl', '_blank', 'width=600,height=100').focus();
}
</script>
End Section
这是目标Music.html页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<audio controls>
<source src="" id="audio" type="audio/mp3"> audio playback requires IE9 or above
</audio>
<script>
document.addEventListener("DOMContentLoaded", function() {
document.getElementById('audio').src = window.location.search.substr(1)
});
</script>
</body>
</html>
对于html link a
和html link b
,目标Music.html页面会加载并播放003.mp3。但html link a
会打开一个新窗口,html link b
会替换现有窗口。
我确定我犯了一个基本错误,但为什么我不能将内联window.open javascript移动到一个函数中,以便它可以被页面上可能存在的其他元素调用?
答案 0 :(得分:1)
<a href="Music/Music.html" onclick="openWindow">html Link</a>
将一个函数附加到单击,然后打开带有'_blank'的窗口,这将在新窗口或选项卡中打开文档。
function openWindow() {
window.open("/Music/Music.html?filenameyouwant", "_blank",
"width=600, height=200"
).focus();
}
在源HTML中添加ID
<source src="001.mp3" id="audio" type="audio/mp3">
然后使用javascript选择它并将它的src设置为你去过的url的末尾你想要包装url param的获取直到dom加载之后否则将没有源元素
?filenameyouwant
document.addEventListener("DOMContentLoaded", (event) => {
document.getElementById('audio').src = window.location.search.substr(1)
});