我有一个套件,可以记录用户的网络摄像头和麦克风。它在网页上效果很好,但在Chrome扩展程序中,该行如下:
navigator.mediaDevices.getUserMedia({video: true, audio: true})
.then(this.record.bind(this))
.catch(VidRA.error);
Run Code Online (Sandbox Code Playgroud)
扔
NotAllowedError: Failed due to shutdown
Run Code Online (Sandbox Code Playgroud)
我搜索后发现几乎没有任何东西可以解释这一点。有没有其他人遇到过这个问题,或者有人知道我能做些什么?
javascript google-chrome google-chrome-extension getusermedia
在玩 HTML5 验证时,我突然想到,除非需要,否则(似乎)不可能验证字段的输入。
换句话说,它不是可以说“不需要此领域,但如果你做填补它,它必须格局X.匹配” 例如:
<textarea pattern='.{5,10}'></textarea>
Run Code Online (Sandbox Code Playgroud)
将 1-4 个字符(包括)输入到 textarea 中,运行element.willValidate
并element.checkValidity()
返回 true。
我知道 HTML5 验证还不完美。HTML5 无法实现“仅在填充时才进行验证”的概念吗?
我猜这是一个已知的问题,我只是在某种程度上从未遇到过.我有一个通过AJAX发送到PHP的多维数组,如下所示:
let pd = {
vids: $.map(yt_vids_preview.find('tr:has(td :checked)'), function(el) {
let vid = $(el).data('vid');
return {
vid_id: vid.contentDetails.videoId
}; })
};
$.ajax({data: pd, url: 'foo.php', type: 'post'})
Run Code Online (Sandbox Code Playgroud)
这是PHP收到的内容,根据print_r($_POST['vids'])
:
Array
(
[0] => Array
(
[vid_id] => kCkrVN7IVbo
)
[1] => Array
(
[vid_id] => dNVxfnb8fjo
)
[2] => Array
(
[vid_id] => rJEEYTzYiAE
)
)
Run Code Online (Sandbox Code Playgroud)
都好.三个不同的视频.
现在为了古怪.
foreach($_POST['vids'] as $arr) echo $arr['vid_id']."\n";
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这输出:
kCkrVN7IVbo
dNVxfnb8fjo
dNVxfnb8fjo
Run Code Online (Sandbox Code Playgroud)
其中一个项目已被复制,而另一个项目则是昂贵的,已完全省略.我省略了所有其他代码,没有覆盖$arr
或类似的东西.
如果我使用基本for()
循环,甚至迭代回调函数,就不会发生这种情况array_walk()
:
array_walk($_POST['vids'], function($arr) { echo …
Run Code Online (Sandbox Code Playgroud) 我试图了解以下优点是什么(如果有的话):
const obj = {
forename: 'Foo',
surname: 'Bar',
get name() {
//yes I get that I can do other stuff here
return this.forename+' '+this.surname;
}
}
alert(obj.name); //Foo Bar
Run Code Online (Sandbox Code Playgroud)
...超过...
const obj = {
forename: 'Foo',
surname: 'Bar',
name() {
return this.forename+' '+this.surname;
}
}
alert(obj.name()); //Foo Bar
Run Code Online (Sandbox Code Playgroud)
我已经阅读了 ( 1 ; 2 ; 3 ) 但似乎看不到除了可读性和代码风格之外的任何好处。仅此而已吗?两种方法之间没有隐含的行为变化?
是否只关注 JavaScript 中未来的类属性/方法可见性?这是有道理的 - 私有财产的吸气剂。但是因为那还没有,我看不出上面的意思。
任何人都可以启发我吗?
据我了解,必须相对于canvas元素本身(即0、0)而不是相对于您实际填充的形状指定渐变填充。
问题:我对这个主张是否正确,是否有建议的解决方法?
例如(这里是JSFiddle):
ctx.beginPath();
ctx.rect(40, 50, 100, 70);
var grd = ctx.createLinearGradient(0, 50, 0, 120);
grd.addColorStop(0, "red");
grd.addColorStop(1, "blue");
ctx.fillStyle = grd;
ctx.fill();
Run Code Online (Sandbox Code Playgroud)
在那里,我做一个矩形。我希望,从形状的左上方开始用渐变填充它,我将0, 0
作为前两个参数通过。似乎我必须改为传递相对于画布的矩形的X / Y坐标。
例如,如果您有一条用二次曲线构建的圆弧,这将成为一个问题,因为如果不是Maths天才,您就不知道曲线的顶部位置,而只知道控制点。
在最近与初级 JavaScript 开发人员的一次谈话中,我提到了以下技术来减少使用 OR 操作数的费力的 if/else 块:
if (/^(cat|dog|horse)$/.test(animal)) { ... }
Run Code Online (Sandbox Code Playgroud)
而不是
if (animal == 'cat' || animal == 'dog' || animal == 'horse') { ... }
Run Code Online (Sandbox Code Playgroud)
我从来没有遇到过这个问题,但有人认为这是一种糟糕的设计模式,但没有详细说明原因。
我有一个工作正常的视频(webm)捕获脚本。它录制视频然后提供下载。代码的相关部分是这样的:
stopBtn.addEventListener('click', function() {
recorder.ondataavailable = e => {
ul.style.display = 'block';
var a = document.createElement('a'),
li = document.createElement('li');
a.download = ['video_', (new Date() + '').slice(4, 28), '.'+vid_format].join('');
a.textContent = a.download;
a.href = URL.createObjectURL(stream); //<-- deprecated usage?
li.appendChild(a);
ul.appendChild(li);
};
recorder.stop();
startBtn.removeAttribute('disabled');
stopBtn.disabled = true;
}, false);
Run Code Online (Sandbox Code Playgroud)
正如我所说,这有效。但是,控制台表示不URL.createObjectURL
推荐将媒体流传递给,我应该使用 HTMLMediaElementsrcObject
代替。
所以我把它改为:
a.href = URL.createObjectURL(video.srcObject);
Run Code Online (Sandbox Code Playgroud)
...虽然一切仍然有效,但我收到了同样的警告。
有谁知道如何在不使用这种已弃用的方式的情况下获取 URL 或 blob 数据?
我还尝试从视频元素中读取src
和currentSrc
属性,但在涉及流的地方它们返回为空。
我正在getUserMedia
Chrome 扩展内容脚本中创建一个流,我想将它传递给后台脚本。
你不能在它们之间传递非 JSON 数据,所以我的策略是将生成的 blob URL 传递给流。
内容脚本:
function get_stream() {
navigator.mediaDevices.getUserMedia({video: 1}).then(stream => {
chrome.runtime.sendMessage({action: 'got_stream', params: {stream_url: URL.createObjectURL(stream)}});
});
Run Code Online (Sandbox Code Playgroud)
后台脚本:
chrome.runtime.onMessage.addListener(function(data) {
switch (data.action) {
case 'got_stream': got_stream(data.params); break;
}
});
function got_stream(params) {
let vid = document.createElement('video');
alert(params.stream_url); //blob:http://...
vid.src = params.stream_url; //error - file not found
}
Run Code Online (Sandbox Code Playgroud)
这很好......直到我尝试将它应用于生成的<video />
元素,此时控制台说找不到文件。
我认为这是因为背景和内容脚本处于沙盒环境中。
有没有什么办法可以解决这个问题,而不必做一些核心的事情,比如通过 WebRTC 或其他什么东西来传输流?
我正在通过 Google 在我的网站中实现单点登录,并且工作正常,但是:我需要它来支持网站的各种实例。
这是一个问题,因为 Google 似乎不支持重定向 URL 中的任何形式的动态性。来自有关重定向 URL 的文档:
确定用户完成授权流程后 API 服务器将用户重定向到的位置。该值必须与您在 API 控制台中配置的 OAuth 2.0 客户端的授权重定向 URI 之一完全匹配。
至少可以说,这很烦人;没有通配符,没有查询字符串变体 - 必须与您在控制台中存储的值完全匹配。
所以我的问题是:有谁知道有什么方法可以告诉 Google 的身份验证服务返回附加到重定向 URL 的自定义数据吗?
我在想类似的事情
$google->setRedirectUri('http://example.com/foo');
//pseudo code...
$google->setCustomRedirectData([
'foo' => 'bar'
]);
Run Code Online (Sandbox Code Playgroud)
...这会产生
http://example.com/foo?code=...&other_google_params=...&foo=bar
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到这一点,或者我别无选择,只能手动指定每个重定向 URL?
我正在通过FileTransfer 插件将通过 Cordova 的MediaCapture 插件录制的视频发送到远程服务器,但没有任何东西——文件或任何数据——都没有到达服务器端。服务器收到请求,但是好像是空的。
根据科尔多瓦的说法,一切顺利。这是成功回调的读数:
这是我的 JS :(mediaFiles[0]
是捕获的视频文件)
var options = new FileUploadOptions();
options.fileName = 'foo.bar';
options.mimeType = mediaFiles[0].type;
options.params = {
mime: mediaFiles[0].type
};
var ft = new FileTransfer();
ft.upload(
mediaFiles[0].fullPath,
encodeURI("http://xxxxxx.com/receive-video.php"),
function (r) {
console.log(r);
alert('sent file!');
},
function (error) {
alert('error');
console.log(error);
},
options,
true
);
Run Code Online (Sandbox Code Playgroud)
(请注意,最后一个参数 ,trustAllHosts
设置为 true,因为我的测试服务器是自签名的。)
Cordova 显然认为它发送了数据,但我的 PHP 脚本不同意。这是我的PHP:
file_put_contents(
'readout.txt',
"Payload\n----------\n".
file_get_contents('php://input').
"\n\nRequest\n----------\n".
print_r($_REQUEST, 1).
"\n\nFiles\n----------\n".
print_r($_FILES, 1).
"\n\nPost\n----------\n".
print_r($_POST, 1)
);
Run Code Online (Sandbox Code Playgroud)
如您所见,我几乎到处寻找。然而,所有这些都会导致读数为空 …
如何向现有 Fontello 目录添加更多字体?
我知道我可以将 config.json 重新导入 Fontello 网站,然后选择新字体,然后重新下载配置文件。
这会更新配置文件,但当然不会更新实际的 .css 文件。
不需要再次下载整个 ZIP(这很烦人,因为每次文件名中都有不同的随机后缀),如何才能做到这一点?
我也尝试过通过 CLI,但基本上没有关于如何实现这一点的文档(如果可以的话)。
cd /path/to/my/fontello/dir
npm run-script build
Run Code Online (Sandbox Code Playgroud) 我有一个类似于以下内容的 SQL 设置:
文章
标签
...以及第三个表记录两者之间的关联,因为每篇文章可以有多个标签:
ARTICLE_TAG_ASSOCS
通过这个问题,我设法构建了一个查询,该查询可以找到至少标有多个标签之一的文章,例如
SELECT articles.*
FROM articles
JOIN article_tag_assocs ata ON articles.id = ata.article_id
JOIN tags ON tags.id = ata.tag_id
WHERE tags.tag = 'budgie' OR tags.tag = 'parrot';
Run Code Online (Sandbox Code Playgroud)
问题:如何更改上述内容以查找匹配所有标签的文章,即“budgie”和“parrot”,而不仅仅是一个?
清楚地将逻辑修改为
WHERE tags.tag = 'budgie' && tags.tag = 'parrot';
Run Code Online (Sandbox Code Playgroud)
...在逻辑上有缺陷,因为 MySQL 正在单独考虑每个标签,一次一个,但希望你明白我的意思。
我几乎不可能搜索到这个的答案,因为我不知道这个语法叫什么.
我有一台运行相对旧版本的PHP(5.5.38)的服务器,当我运行具有以下内容的文件时,我得到解析错误:
public function foo(): array
{
Run Code Online (Sandbox Code Playgroud)
...特别是: array
后缀.
任何人都可以告诉我这个语法是什么(所以我可以进一步研究)以及哪个PHP版本引入了它?
javascript ×9
php ×3
getusermedia ×2
regex ×2
ajax ×1
android ×1
api ×1
arrays ×1
canvas ×1
cordova ×1
css ×1
database ×1
ecmascript-5 ×1
fontello ×1
foreach ×1
google-api ×1
google-oauth ×1
gradient ×1
html ×1
html5 ×1
icons ×1
join ×1
mysql ×1
oop ×1
phonegap ×1
sql ×1
stream ×1
syntax ×1
validation ×1
video ×1
webm ×1
webrtc ×1