我使用03-14 16:33:47.407 26479-26479/com.ivis.live E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ivis.live, PID: 26479
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.getColor(int)' on a null object reference
at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:409)
at com.ivigil.ivis.fragments.CurrentFragment$1.onResponse(CurrentFragment.java:285)
at com.ivigil.ivis.fragments.CurrentFragment$1.onResponse(CurrentFragment.java:222)
at com.android.volley.toolbox.JsonRequest.deliverResponse(JsonRequest.java:83)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:106)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
和window.open('')
作为第二个参数在新标签中打开我的链接。例如。 '_blank'
但是,最近我添加了第三个参数window.open('http://google.com', '_blank')
,以便'noopener'
在新选项卡中变为空,并且新选项卡无法访问父选项卡/窗口。即window.opener
是window.opener
null
所以上面的代码解决了安全问题,但是没有打开新选项卡,而是打开了一个新窗口,这不是我的预期。我的浏览器设置相同,未对其进行任何更改。
我能做些什么来让这个代码打开新标签而不是新窗口?我不想删除window.open('http://google.com', '_blank', 'noopener')
作为第三个参数
答案 0 :(得分:8)
可以在一行中解决此问题的另一种方法是直接访问opener属性并将其设置为null,以利用window.open()
返回Window
对象的事实。这将适用于所有浏览器,以使用空window.opener
打开一个新标签页。
window.open(url, '_blank').opener = null;
答案 1 :(得分:6)
老实说,我认为您的代码很好,但您可以尝试不同的实现:
var yourWindow = window.open();
yourWindow.opener = null;
yourWindow.location = "http://someurl.here";
yourWindow.target = "_blank";
答案 2 :(得分:3)
这是我唯一适用于跨浏览器(IE11,Chrome 66,FF 60,Safari 11.1)的东西
static

答案 3 :(得分:2)
const anchor = document.createElement('a');
Object.assign(anchor, {
target: '_blank',
href: 'http://google.com',
rel: 'noopener noreferrer'
})
.click()
这是我最近使用的方法,它创建了一个锚标记并点击它,我们必须使用此变通方法作为用户首选项。