Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与变量(JavaScript)一起使用时,window.open将变为空url_Javascript_Html - Fatal编程技术网

与变量(JavaScript)一起使用时,window.open将变为空url

与变量(JavaScript)一起使用时,window.open将变为空url,javascript,html,Javascript,Html,我有下面的代码来获取在phpBB论坛上为主题添加书签的链接 var bookmark = document.getElementsByClassName('bookmark-link'); console.log(bookmark) var bookmark_array = Array.from(bookmark); console.log(bookmark_array) bookmark_array.length = 1; console.log(bookmark_array) var str

我有下面的代码来获取在phpBB论坛上为主题添加书签的链接

var bookmark = document.getElementsByClassName('bookmark-link');
console.log(bookmark)
var bookmark_array = Array.from(bookmark);
console.log(bookmark_array)
bookmark_array.length = 1;
console.log(bookmark_array)
var str = bookmark_array.toString();
console.log(str)
var link = str.match('\/viewtopic\.php\?f=(\d+)&t=(\d+)&bookmark=1&hash=(\w+)');
console.log(link)
window.open(link);
setTimeout(() => {  window.close(link); }, 3000);
(控制台日志只是为了可视化正在发生的事情)

但是window.open会指向类似
https://my.site.com/null
最后

不过,
链接的控制台日志显示了我要转到的正确链接

当我手动执行它时(从console.log(link)输出复制url,然后执行
window.open(“我复制的内容”
),它工作得很好

我认为这是引号的问题,但是在引号中包含
链接将导致
https://my.site.com/“空”

我在Chrome中为该站点启用了弹出窗口,并且它在我所有的广告拦截器中都被列为白名单

所以我真的不知道为什么会这样


谢谢!

您的代码有很多不必要的复杂性。我在下面对其进行了简化

之所以选择
null
,是因为书签与您使用
str.match()
测试的模式不匹配,因此它返回
null
。您需要检查一下

var bookmark = document.getElementsByClassName('bookmark-link');
console.log(bookmark)
var first_bookmark = bookmark[0];
var url = first_bookmark.href;
console.log(url)
var link = url.match(/\/viewtopic\.php\?f=(\d+)&t=(\d+)&bookmark=1&hash=(\w+)/);
if (link) {
    window.open(url);
    setTimeout(() => {  window.close(link); }, 3000);
} else {
    alert("Bookmark link doesn't match the pattern");
}

str.match()
返回一个数组,而不是一个字符串。@Barmar我应该如何着手修复它?.toString返回
未捕获的TypeError:无法读取null的属性“toString”
。我想保持代码结构不变,因为这是我第一天用JS编码的时候,所以即使它不是很好,至少我知道它是如何工作的如果你得到null,它也会告诉我表示它与regexp不匹配。这就是URL为
null
的原因。代码中有许多奇怪的东西。为什么要将数组长度设置为1?如果只需要第一个元素,请使用
书签\u数组[0]