小编Utk*_*nos的帖子

Chrome扩展程序-getUserMedia引发“ NotAllowedError:由于关机失败”

我有一个套件,可以记录用户的网络摄像头和麦克风。它在网页上效果很好,但在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

6
推荐指数
2
解决办法
1277
查看次数

HTML5 验证:字段不是必需的,但如果填写,必须匹配模式?

在玩 HTML5 验证时,我突然想到,除非需要,否则(似乎)不可能验证字段的输入。

换句话说,它不是可以说“不需要此领域,但如果你填补它,它必须格局X.匹配” 例如:

<textarea pattern='.{5,10}'></textarea>
Run Code Online (Sandbox Code Playgroud)

将 1-4 个字符(包括)输入到 textarea 中,运行element.willValidateelement.checkValidity()返回 true。

我知道 HTML5 验证还不完美。HTML5 无法实现“仅在填充时才进行验证”的概念吗?

html javascript regex api validation

5
推荐指数
1
解决办法
1045
查看次数

PHP通过AJAX发送带有多维数组的奇怪之处

我猜这是一个已知的问题,我只是在某种程度上从未遇到过.我有一个通过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)

javascript php arrays ajax foreach

5
推荐指数
1
解决办法
90
查看次数

JavaScript getter 方法的重点是什么?

我试图了解以下优点是什么(如果有的话):

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 中未来的类属性/方法可见性?这是有道理的 - 私有财产的吸气剂。但是因为那还没有,我看不出上面的意思。

任何人都可以启发我吗?

javascript oop getter-setter ecmascript-5

5
推荐指数
1
解决办法
287
查看次数

相对于形状位置而不是画布位置的渐变填充?

据我了解,必须相对于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 html5 gradient canvas

4
推荐指数
1
解决办法
2141
查看次数

这是一个糟糕的正则表达式模式吗?

在最近与初级 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)

我从来没有遇到过这个问题,但有人认为这是一种糟糕的设计模式,但没有详细说明原因。

javascript regex

4
推荐指数
1
解决办法
132
查看次数

从视频流中获取数据 URL?

我有一个工作正常的视频(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 数据?

我还尝试从视频元素中读取srccurrentSrc属性,但在涉及流的地方它们返回为空。

javascript video stream webm webrtc

3
推荐指数
1
解决办法
8489
查看次数

Chrome 内容和后台脚本可以共享对 blob: URL 的访问吗?

我正在getUserMediaChrome 扩展内容脚本中创建一个流,我想将它传递给后台脚本。

你不能在它们之间传递非 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 或其他什么东西来传输流?

javascript google-chrome-extension getusermedia

3
推荐指数
1
解决办法
1502
查看次数

Google auth - 有什么方法可以在重定向 URL 中发回自定义数据吗?

我正在通过 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?

php google-api single-sign-on google-oauth

3
推荐指数
1
解决办法
1293
查看次数

Cordova FileTransfer 发送文件但未收到任何内容

我正在通过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)

如您所见,我几乎到处寻找。然而,所有这些都会导致读数为空 …

javascript android file-transfer cordova phonegap

2
推荐指数
1
解决办法
474
查看次数

Fontello - 如何将字体添加到现有项目?

如何向现有 Fontello 目录添加更多字体?

我知道我可以将 config.json 重新导入 Fontello 网站,然后选择新字体,然后重新下载配置文件。

这会更新配置文件,但当然不会更新实际的 .css 文件。

不需要再次下载整个 ZIP(这很烦人,因为每次文件名中都有不同的随机后缀),如何才能做到这一点?

我也尝试过通过 CLI,但基本上没有关于如何实现这一点的文档(如果可以的话)。

cd /path/to/my/fontello/dir
npm run-script build
Run Code Online (Sandbox Code Playgroud)

css icons fontello

2
推荐指数
1
解决办法
3258
查看次数

MySQL - 匹配所有标签而不是任何标签

我有一个类似于以下内容的 SQL 设置:

文章

  • 身份证(PK)
  • 姓名

标签

  • 身份证(PK)
  • 标签

...以及第三个表记录两者之间的关联,因为每篇文章可以有多个标签:

ARTICLE_TAG_ASSOCS

  • 身份证(PK)
  • article_id (FK)
  • tag_id (FK)

通过这个问题,我设法构建了一个查询,该查询可以找到至少标有多个标签之一的文章,例如

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 正在单独考虑每个标签,一次一个,但希望你明白我的意思。

mysql sql database join

1
推荐指数
1
解决办法
1388
查看次数

PHP语法 - 这是什么?

我几乎不可能搜索到这个的答案,因为我不知道这个语法叫什么.

我有一台运行相对旧版本的PHP(5.5.38)的服务器,当我运行具有以下内容的文件时,我得到解析错误:

public function foo(): array
{
Run Code Online (Sandbox Code Playgroud)

...特别是: array后缀.

任何人都可以告诉我这个语法是什么(所以我可以进一步研究)以及哪个PHP版本引入了它?

php syntax

-1
推荐指数
1
解决办法
53
查看次数