以下代码适用于Chrome(22.0)但不适用于Safari(6.0)
<!DOCTYPE html>
<html>
<head>
<script>
function onGo(e) {
var fr = new FileReader();
var file = document.getElementById("file").files[0];
fr.onload = function(e) {
var data = new Uint8Array(e.target.result);
var blob = new Blob([data], {type: 'audio/mpeg'});
var audio = document.createElement('audio');
audio.addEventListener('loadeddata', function(e) {
audio.play();
}, false);
audio.addEventListener('error', function(e) {
console.log('error!', e);
}, false);
audio.src = webkitURL.createObjectURL(blob);
};
fr.readAsArrayBuffer(file);
}
</script>
</head>
<body>
<input type="file" id="file" name="file" />
<input type="submit" id="go" onclick="onGo()" value="Go" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在Safari中,既不调用回调(loadeddata也不错误).使用的内容是一个mp3文件,通常用音频标签回放.Safari需要特别小心吗?
我正在使用ScriptProcessorNode的onaudioprocess回调来处理麦克风输入.通过将MediaStreamSourceNode连接到ScriptProcessorNode,我可以在onaudioprocess回调函数中获取原始音频数据.但是,在大约30秒后(这在10到35秒之间变化),浏览器停止调用onaudioprocess.在以下代码中,console.log输出('>>')总是在大约30秒后停止.
var ctx = new AudioContext();
var BUFFER_LENGTH = 4096;
console.log('Buffer length is + ' + BUFFER_LENGTH);
navigator.webkitGetUserMedia({audio: true}, function (stream) {
var mediaStreamSource = ctx.createMediaStreamSource(stream);
var scriptProcessor = ctx.createScriptProcessor(BUFFER_LENGTH, 1, 1);
scriptProcessor.onaudioprocess = function (e) {
console.log('>>');
};
scriptProcessor.connect(ctx.destination);
}, function(e) {
console.error('Unable to get audio input source.');
});
Run Code Online (Sandbox Code Playgroud)
我尝试了所有可能的BUFFER_LENGTH(256,512,1024,2048,4096,8192,16384),但情况没有改变(30秒后停止记录.)我在最新的Chrome版本(版本35.0)中观察到了这个问题. 1916.153)和Canary(版本37.0.2060.3 canary.)有没有人知道任何变通方法?
我想在Chrome devtools窗口中添加一个面板UI,并显示有关当前加载页面的一些信息.为了获取信息,我想在页面加载之前注入一些JavaScript代码,这样我就可以改变某些方法的行为.
我测试了以下代码:
的manifest.json
{
"name": "Test Dev Panel",
"version": "0.1",
"description": "Extends the Developer Tools, replacing Array.toString() with a bogus one.",
"devtools_page": "devtools.html",
"manifest_version": 2,
"permissions": ["<all_urls>"],
"content_scripts": [{
"matches": ["http://*/*"],
"js": ["bogusarray.js"],
"run_at": "document_start"
}]
}
Run Code Online (Sandbox Code Playgroud)
devtools.js
chrome.devtools.panels.create("Text Dev Panel",
"img/iconDev.png",
"panel.html");
Run Code Online (Sandbox Code Playgroud)
bogusarray.js
Array.prototype.toString = function () {
return 'Injected!';
};
Run Code Online (Sandbox Code Playgroud)
但是,由于Array.toString()的行为没有改变,JavaScript(bogusarray.js)似乎从未注入到加载的页面中.对此有什么建议吗?