如何使Laravel将View的“Content-Type”标头返回为“application/javascript”?

2022-08-30 18:03:27

我正在尝试输出一个动态javascript文件,以便从带有标签的外部网站中包含。由于视图使用的是 Blade 引擎,因此它将呈现为 。[script src=""]text/html

我希望将此视图的标题设置为,以避免Chrome用诸如”Content-Typeapplication/javascriptResource interpreted as Script but transferred with MIME type text/html:"

我的控制器:

{
    // ...
    return View::make('embedded')->with('foo', $foo);
}

视图本身:

<?php
header('Content-Type: application/javascript; charset=UTF-8', true);
?>(function(jQuery) {
    // append stylesheets to <head>
    var file;
    // ...
})(jQuery);

我发现,在我看来,我可以像预期的那样使用自定义标头,但是当我尝试重新定义标头时,即使将参数设置为.,它似乎也没有任何作用。header()X-Content-TypeContent-Typereplacetrue

我在这里肯定错过了一些明显的东西,希望你能向我指出来:)

非常感谢您的帮助


答案 1

Laravel 允许您通过 Response 类修改标头信息,因此您必须使用它。从视图中删除该行,然后在控制器中按如下方式尝试:header

$contents = View::make('embedded')->with('foo', $foo);
$response = Response::make($contents, $statusCode);
$response->header('Content-Type', 'application/javascript');
return $response;

答案 2

在Laravel 5.4中,你可以这样做:

$contents = view('embedded')->with('foo', $foo);
return response($contents)->header('Content-Type', 'application/javascript');

顺便说一句,无需在视图中设置标头。


推荐